SELECT stuNo,COUNT(*) AS 选课数, GROUP_CONCAT(corNo)AS 选课详细 FROM stuscore GROUP BY stuNo,以这个代码举一个有数据例子
时间: 2024-03-23 07:40:36 浏览: 90
假设我们有以下的一个stuscore表:
| stuNo | corNo | score |
| ----- | ----- | ----- |
| 001 | 001 | 80 |
| 001 | 002 | 90 |
| 001 | 003 | 85 |
| 002 | 002 | 92 |
| 002 | 003 | 88 |
| 003 | 001 | 87 |
| 003 | 003 | 90 |
我们可以使用以下SQL查询语句,按照 stuNo 列进行分组,并计算每个学生的选课数和选课详细:
```
SELECT stuNo, COUNT(*) AS 选课数, GROUP_CONCAT(corNo) AS 选课详细
FROM stuscore
GROUP BY stuNo;
```
执行上述SQL语句后,将得到以下结果集:
| stuNo | 选课数 | 选课详细 |
| ----- | ----- | ------------- |
| 001 | 3 | 001,002,003 |
| 002 | 2 | 002,003 |
| 003 | 2 | 001,003 |
其中每行表示一个学生、其对应的选课数和选课详细。例如,第一行表示学号为001的学生,选了3门课程,分别是001、002和003。
相关问题
SELECT stuNo,COUNT(*) AS 选课数, GROUP_CONCAT(corNo)AS 选课详细 FROM stuscore GROUP BY stuNo WITH ROLLUP,如果是以上代码呢
如果在上述的 SQL 查询语句中加上了 `WITH ROLLUP` 子句,那么将会在结果集中增加汇总行,用于显示每个分组的汇总数据。以下是加上 `WITH ROLLUP` 子句的 SQL 查询语句:
```
SELECT stuNo, COUNT(*) AS 选课数, GROUP_CONCAT(corNo) AS 选课详细
FROM stuscore
GROUP BY stuNo
WITH ROLLUP;
```
执行上述 SQL 查询语句后,将得到以下结果集:
| stuNo | 选课数 | 选课详细 |
| ----- | ----- | ------------- |
| 001 | 3 | 001,002,003 |
| 002 | 2 | 002,003 |
| 003 | 2 | 001,003 |
| NULL | 7 | 001,002,003,002,003,001,003 |
可以看到,在结果集中增加了一行汇总数据,其中 `stuNo` 列为 `NULL`,表示这是所有分组的汇总数据。汇总行的 `选课数` 列显示了所有学生的选课总数,而 `选课详细` 列则是所有学生的选课详细信息的汇总。
select * from s_student group by address > 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'java83.s_student.stuno' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by这段查询语句为什么会报错
这段查询语句会报错是因为在 SQL 的严格模式下,GROUP BY 语句需要将所有未聚合的列都包含在 GROUP BY 子句中。而这段查询语句中,SELECT 列表中包含了未聚合的列 stuno,但是却没有在 GROUP BY 子句中出现,因此会报错。
你可以将查询语句修改为以下形式来避免报错:
SELECT * FROM s_student GROUP BY address, stuno;
这样就将未聚合的列 stuno 也加入了 GROUP BY 子句中,从而符合 SQL 严格模式的要求。
阅读全文