问题描述:
有一个courses
表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
+---------+------------+ | student | class | +---------+------------+ | A | Math | | B | English | | C | Math | | D | Biology | | E | Math | | F | Computer | | G | Math | | H | Math | | I | Math | +---------+------------+
应该输出:
+---------+ | class | +---------+ | Math | +---------+
Note:
学生在每个课中不应被重复计算。
分析:
SELECT class from courses
group by class having count(DISTINCT student) >= 5;
关于GROUP BY :用于结合聚合函数,根据一个或多个列对结果集进行分组;必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
注意:聚合函数是---sum()、count()、avg()等都是“聚合函数”
◆COUNT() 函数:返回匹配指定条件的行数;
▷COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目
SELECT COUNT(DISTINCT column_name) FROM table_name;
▷COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;
▷COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name;
◆AVG() 函数:返回数值列的平均值。SELECT AVG(column_name) FROM table_name
◆SUM() 函数:返回数值列的总数,SELECT SUM(column_name) FROM table_name;