本題使用的是 MySQL8.0,沒有在 MySQL5.6 版本中測驗過,不保證正確。
題目
題目來源:超過5名學生的課
查出超過或等於 5
名學生的課(學生的課不被重複計算)
create table courses (
student varchar(255),
class varchar(255)
)
insert into courses values
('A', 'Math'),
('B', 'English'),
('C', 'Math'),
('D', 'Biology'),
('E', 'Math'),
('F', 'Computer'),
('G', 'Math'),
('H', 'Math'),
('I', 'Math');
SQL:方法一
select class from courses group by class having count(*) >= 5;
解析
學生的課不重複,所以按照 class
分組,在使用 having
篩選出大於等於 5
課的同學
SQL:方法二
select class from (
select class, count(*) as num from courses group by class
) as c where num >= 5;
解析
- 首先查出每門課的學生人數,使用
group by
分組 - 把這次查詢作為一個臨時表
- 再次對這張表進行查詢,篩選條件是人數大於等於
5
人。