选课表SQL问题引发的小困惑

同事下班前突然问我一个SQL问题,我看了看,突然有点蒙蔽,想想很简单,但是却突然卡壳。。。。

-- 有一个选课记录,其中
-- student_id表示选课记录的学生id
-- cource_id表示选课记录的课程id
create table course_select(
	id int(11) NOT NULL auto_increment PRIMARY KEY, 
	student_id varchar(20), 
	cource_id varchar(10)
);

现在问查询:
1. 所有学生的选课数量
2. 所有课程被选的学生数量

下面是解答过程:

-- 首先插入一些数据作为实验数据
INSERT INTO course_select(student_id, cource_id) VALUES('s_1', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_2', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_3', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_4', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_5', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_6', 'c_1');
INSERT INTO course_select(student_id, cource_id) VALUES('s_1', 'c_2');
INSERT INTO course_select(student_id, cource_id) VALUES('s_1', 'c_3');
INSERT INTO course_select(student_id, cource_id) VALUES('s_1', 'c_4');
INSERT INTO course_select(student_id, cource_id) VALUES('s_1', 'c_5');

--  1. 所有学生的选课数量
SELECT 
	student_id, 
	count(student_id) 
FROM 
	course_select 
WHERE 
	student_id in (
		SELECT 
			student_id 
		FROM course_select 
		GROUP BY cource_id)
GROUP BY student_id;

-- student_id  count(student_id) 
-- s_1				5
-- s_2				1
-- s_3				1
-- s_4				1
-- s_5				1
-- s_6				1

-- 2. 所有课程的学生数量
SELECT 
	cource_id, 
	count(cource_id) 
FROM 
	course_select 
WHERE 
	cource_id in (
		SELECT 
			cource_id 
		FROM course_select 
		GROUP BY student_id)
GROUP BY cource_id;

-- cource_id   count(cource_id) 
-- c_1				6
-- c_2				1
-- c_3				1
-- c_4				1
-- c_5				1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章