SELECT SNO FROM(SELECT SNO,COUNT(*) CNUM FROM (SELECT SNO FROM SC)GROUP BY SNO)HAVING COUNT(CNUM)=1;不是单独分组函数
时间: 2023-12-29 22:04:08 浏览: 25
这段 SQL 语句其实是单独使用了分组函数,具体解释如下:
首先,内层的 SELECT 语句中使用了一个子查询 `(SELECT SNO FROM SC)`,这个子查询返回了所有选课表中的学生编号。
然后,这个学生编号列表按照 SNO 进行分组,并统计每个分组中有多少条记录,即每个学生选了多少门课程,使用了 COUNT(*) 函数。
接着,外层 SELECT 语句对内层 SELECT 语句的结果进行筛选,选择满足条件 COUNT(CNUM)=1 的学生编号,即只选了一门课程的学生。
因此,这段 SQL 语句中使用了单独的分组函数 COUNT(*),并没有和其他聚合函数搭配使用。
相关问题
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 表中选了两门及以上课程的学生的平均分数。
SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno用有数据的例子做一些
假设我们有一个 SC 表,其中记录了学生选修的课程成绩信息,包含以下字段:
- Sno:学生编号
- Cno:课程编号
- Score:成绩
下面是一个简单的 SC 表示例:
| Sno | Cno | Score |
| ---- | ---- | ----- |
| 001 | 101 | 85 |
| 002 | 102 | 72 |
| 003 | 101 | 93 |
| 002 | 101 | 68 |
| 004 | 103 | 90 |
| 001 | 103 | 78 |
| 002 | 103 | 88 |
| 004 | 101 | 95 |
| 003 | 102 | 80 |
| 004 | 102 | 83 |
现在我们想要查询每门课程的选修人数,可以使用以下 SQL 语句:
```
SELECT Cno, COUNT(Sno)
FROM SC
GROUP BY Cno;
```
执行以上 SQL 语句,会得到以下结果:
| Cno | COUNT(Sno) |
| ---- | ---------- |
| 101 | 4 |
| 102 | 3 |
| 103 | 3 |
可以看到,以上结果表示课程编号为 101 的课程有 4 个学生选修,课程编号为 102 的课程有 3 个学生选修,课程编号为 103 的课程也有 3 个学生选修。