有一個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 + 臨時表 + where cnt >=5
- 第一次提交
select a.class from (
select distinct class, count(class) as cnt
from courses
group by class
) as a
where a.cnt >= 5
結(jié)果錯誤:
輸入:
{"headers": {"courses": ["student", "class"]}, "rows": {"courses": [["A", "Math"], ["B", "English"], ["C", "Math"], ["D", "Biology"], ["E", "Math"], ["F", "Math"], ["A", "Math"]]}}
輸出
{"headers": ["class"], "values": [["Math"]]}
預期結(jié)果
{"headers":["class"],"values":[]}
看了評論區(qū),學生A 重修了數(shù)學杭跪。哈哈
想到DISTINCT 去重涧尿,又看了評論區(qū)答案一波姑廉。
- 第二次提交
select a.class from (
select class ,count(distinct student ) as cnt
from courses
group by class
) as a
where a.cnt >= 5
distinct 居然還能在count()函數(shù)里面用桥言,學到了。
- 第三次提交(來自評論區(qū)大佬)
SELECT CLASS
FROM COURSES
GROUP BY CLASS
HAVING COUNT(DISTINCT STUDENT) >= 5;
先group by分組扔涧,再用having count() + distinct去重計數(shù)篩選枯夜。
寫的也優(yōu)雅。
總結(jié)
distinct 基本用法摔吏。
having 跟在聚合函數(shù)后面做條件篩選征讲。
臨時表 使用稳诚。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/classes-more-than-5-students
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)氨距,非商業(yè)轉(zhuǎn)載請注明出處俏让。