SQL查询结果

SQL查询结果
查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数
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了
← 上一篇: 下一篇: →