
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>90
GROUP BY Sno
HAVING COUNT(*)>3;
第一个COUNT(*)查询得到的是某位学生大于90的课程数还是全部学生大于90的课程数?
如果是前者那后者怎么写?
如果是后者那前者又怎么写?
望赐教!
一楼说的对
你的贴出来的 SQL 查的是每位学生大于 90 的课程数( > 90 的课程数 还必须 > 3 才行,因为有 HAVING COUNT(*)>3) 不是 某位学生
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>90
HAVING COUNT(*)>3
说下 SQL 执行顺序
===SQL Select - 执行顺序 ===
= 1、from子句组装来自不同数据源的数据;
= 2、where子句基于指漏宏伏定的条件对记录行进行筛选;
= 3、group by子句将数据划分为多个分组;
= 4、使用聚集函数进行计算;
= 5、使用having子绝念句筛选分组;
= 6、计算所有的表达式;
= 7、使用order by对结果集进行排序。
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>90
GROUP BY Sno
HAVING COUNT(*)>3
是这样返携执行的
先选出 所有 Grade>90 的记录
如:
Sno Grade
1 99
2 98
1 91
2 95
3 95
3 91
3 99
3 96
然后按学号分组
1 91
1 99
2 95
2 98
3 95
3 91
3 99
3 96
然后COUNT(*)统计
Sno Count
1 2
2 2
3 4
在用HAVING COUNT(*)>3 筛选
Sno=1 的 只有 2 门课程 不符合要求
Sno=2 的 也一样
Sno=3 的 才行
SELECT Sno, COUNT(*) as col
FROM SC
WHERE Grade>孝运90
and col >巧含梁老销 3
GROUP BY Sno
第一个count(*)是大于90的某虚者键位学生,因为是按Sno 分差巧组的,如果想得到后者嫌型的话
select count(*) form SC
WHERE Grade>90 ,having count(*)>3是按照这个分组计数的数量大于三的筛选出来
每位学生大于90的课程数
后者的话就不需要GROUP BY了