SELECT Sno FROM GRADE GROUP BY Sno HAVING MIN(grades)>80为什么得到的是空而SELECT Sno FROM GRADE WHERE grades>80 GROUP BY Sno HAVING MIN(grades)>80得到的有正确的值
时间: 2024-01-24 10:19:05 浏览: 28
这是因为这两个SQL语句的查询条件不同。
第一个SQL语句中,先使用了GROUP BY对Sno进行分组,然后使用HAVING筛选出分组后最小的成绩大于80的Sno。但是,如果某个学生没有成绩大于80分,则该学生将不会出现在结果中,因为该分组的最小成绩为小于或等于80分。
而第二个SQL语句中,先使用了WHERE筛选出成绩大于80分的学生,然后再对这些学生进行分组,并使用HAVING筛选出分组后最小的成绩大于80分的Sno。因此,如果某个学生没有成绩大于80分,则该学生也会出现在结果中,但是该学生的最小成绩将小于或等于80分,不符合HAVING的筛选条件,因此该Sno不会出现在结果中。
因此,这两个SQL语句的查询结果不同,第一个SQL语句得到的结果为空,而第二个SQL语句得到的结果可能包含一些不符合条件的Sno。
相关问题
MySQL上运行 select distinct sno from sc where grade>90 and grade<100
你的问题是关于 MySQL 数据库的查询语句,查询的是表 sc 中成绩在 90 到 100 之间的学生学号。可以使用以下 SQL 语句来实现这个查询:
```
SELECT DISTINCT sno FROM sc WHERE grade > 90 AND grade < 100
```
其中,`SELECT DISTINCT sno` 表示要查询表 sc 中不重复的学生学号,`FROM sc` 表示要从表 sc 中进行查询,`WHERE grade > 90 AND grade < 100` 表示要查询符合条件的记录,即成绩在 90 到 100 之间的学生。
SELECT sno,AVG(score) AS 平均分数 FROM SC GROUP BY sno having count[*)>=2 或者 having count(Sno)>=2
这是一个 SQL 语句,它的作用是查询出选了两门及以上课程的学生的平均分数。具体解释如下:
- SELECT:表示要选择哪些列,这里选择了学号 sno 和平均分数 AVG(score)。
- FROM:表示从哪张表中查询,这里从 SC 表中查询。
- GROUP BY:表示按照哪些列进行分组,这里按照学号 sno 进行分组。
- HAVING:表示对分组后的结果进行筛选,这里筛选出选了两门及以上课程的学生。
- COUNT(*) 或 COUNT(Sno):表示统计分组后每个组有多少行,* 表示统计所有列,Sno 表示只统计 Sno 列。
- >=2:表示统计结果必须大于等于 2。
总的来说,这段 SQL 语句的作用是查询 SC 表中选了两门及以上课程的学生的平均分数。