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