mysql 用 group by 和 order by同时使用

Posted matengfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 用 group by 和 order by同时使用相关的知识,希望对你有一定的参考价值。

首先,这是不可能实现的

mysql的查询的顺序

select -> from-> where->group by->having->order by.

但mysql的解析器执行顺序:

from-> where->group by->having->select->order by.

所以,从执行的流程来看,是先group by 然后在 order by.
order by拿到的结果里已经是group by以后的结果.

因此,order by的字段必须是group by 里面已经存在的字段.

如果有人问到,想group by同时,进行排序

注意,查询 按照索引进行排序

用 group_concat进行排序

SELECT
pq.id,SUBSTRING_INDEX( group_concat( pq.paperId ORDER BY pq.id),‘,‘,1
) AS paperId,SUBSTRING_INDEX(group_concat( pq.questionType ORDER BY pq.id),‘,‘,
1
) AS questionType,pq.questionId,p.id as pId,p.type,
SUBSTRING_INDEX( group_concat( p.type ORDER BY pq.id),‘,‘,1
) AS pType
FROM
paper_question as `pq` left join `question` as `p` on `pq`.`questionId` = `p`.`id`
WHERE
pq.paperId = 470 GROUP BY pq.paperId;












以上是关于mysql 用 group by 和 order by同时使用的主要内容,如果未能解决你的问题,请参考以下文章

MySql Group By 和 order by date

mysql:group by,order by

MySQL GROUP BY 和 SELECT GROUP BY [重复]

Mysql之order by|group by 排序优化

加速使用 Group By 和 Order By 的多表 Mysql 查询

MySQL 查询优化与 group by 和 order by rand