SELECT SNO FROM(SELECT SNO,COUNT(*) CNUM FROM (SELECT SNO FROM SC)GROUP BY SNO)HAVING COUNT(CNUM)=1;不是单独分组函数
时间: 2023-12-29 17:04:08 浏览: 67
这段 SQL 语句其实是单独使用了分组函数,具体解释如下:
首先,内层的 SELECT 语句中使用了一个子查询 `(SELECT SNO FROM SC)`,这个子查询返回了所有选课表中的学生编号。
然后,这个学生编号列表按照 SNO 进行分组,并统计每个分组中有多少条记录,即每个学生选了多少门课程,使用了 COUNT(*) 函数。
接着,外层 SELECT 语句对内层 SELECT 语句的结果进行筛选,选择满足条件 COUNT(CNUM)=1 的学生编号,即只选了一门课程的学生。
因此,这段 SQL 语句中使用了单独的分组函数 COUNT(*),并没有和其他聚合函数搭配使用。
相关问题
sqlserver中,将下列语句转换为使用exist语句完成的语句: SELECT Sno FROM SC,Course where SC.Cno=Course.Cno Group by Sno having count(*)=(select count(*) from Course)
以下是使用EXISTS语句完成的SQL语句:
```
SELECT Sno
FROM SC
WHERE EXISTS (
SELECT 1
FROM Course
WHERE SC.Cno = Course.Cno
HAVING COUNT(DISTINCT Course.Cno) = (SELECT COUNT(*) FROM Course)
)
GROUP BY Sno;
```
这个查询的做法是,在SC表中对每个学生进行分组,然后检查是否存在一个子查询,该子查询返回的是所有课程的数量。子查询中的计数是基于Course表中不同的课程号进行的,而SC表中具有相同课程号的行将被聚合在一起并计数。如果在SC表中找到的课程数量等于Course表中的课程数量,则该学生被认为是所需学生的一部分,并且将包括在查询结果中。
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 表中选了两门及以上课程的学生的平均分数。
阅读全文