mysql先分组后排序语法_mysql查询中oder by 和group by 的问题【要先分组再排序】

本文探讨了在MySQL中使用GROUP BY和ORDER BY子句时遇到的问题。作者在尝试查询与特定学生学习课程完全相同的其他同学信息时,遇到了错误。经过分析,发现ORDER BY不能与GROUP BY直接一起使用,因为需要先进行分组再排序。最终,通过调整SQL语句,使用GROUP_CONCAT函数的内置排序功能解决了问题。
摘要由CSDN通过智能技术生成

做网上的mysql语句练习题,题目如下,

-- 13、查询和"01"号的同学学习的课程完全相同的其他同学的信息

我写的mysql语句如下,

SELECT student.`*` FROM student

LEFT JOIN score ON student.s_id = score.s_id

ORDER BY score.c_id

WHERE student.s_id <> '01'

GROUP BY student.s_id

HAVING GROUP_CONCAT(score.c_id) = '01,02,03'

报错如下,

a7617f131e251c678b9c7dcde29db4ce.png

经过尝试,把这句排序的语句去掉就能正常运行了,ORDER BY score.c_id

为什么order by 语句不能用在那里呢?

走过路过,请大神们指点迷津...

------------------------------------------------------------------------我是第一道分割线----------------------------------------------------------------------

好像是order by 语句与group by 语法不能在一起使用,如下,

SELECT student.`*` FROM student

LEFT JOIN score ON student.s_id = score.s_id

WHERE student.s_id != '01'

ORDER BY score.c_id

GROUP BY student.s_id

这种语句是要报错的。

具体原因待继续定位。。。。。。

----------------------------------------------------------------------我是第二道分割线-----------------------------------------------------------------------

后面发现 group_concat 函数本来就有排序的功能了,我想要的排序功能可以按照如下语句实现,

SELECT student.* FROM student

LEFT JOIN score ON student.s_id = score.s_id

WHERE student.s_id <> '01'

GROUP BY student.s_id

HAVING GROUP_CONCAT(score.c_id ORDER BY score.c_id SEPARATOR '_') = '01_02_03'

----------------------------------------------------------------------我是最后一道分割线-----------------------------------------------------------------------

问题就是order by 和group by 的问题。但是不是我之前以为的这两个语法不能连用,而是,要先分组再排序!!!!!!!

改成如下语句就可以了:

SELECT student.`*` FROM student

LEFT JOIN score ON student.s_id = score.s_id

WHERE student.s_id <> '01'

GROUP BY student.s_id

HAVING GROUP_CONCAT(score.c_id) = '01,02,03'

ORDER BY score.c_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值