選課表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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章