同事下班前突然問我一個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