在没有子查询的 MySQL 中,ORDER BY 优先于 GROUP BY

本教程将介绍在没有子查询的 MySQL 中,ORDER BY 优先于 GROUP BY的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在没有子查询的 MySQL 中,ORDER BY 优先于 GROUP BY 教程 第1张

问题描述

我有以下查询可以满足我的要求,但我怀疑没有子查询也可以做到这一点:

  SELECT * 
 FROM (SELECT * 
FROM 'versions' 
  ORDER BY 'ID' DESC) AS X 
GROUP BY 'program'

我需要的是按程序分组,但返回ID"值最高的版本中的对象的结果.

根据我过去的经验,像这样的查询在 MySQL 中工作,但由于某种原因,它不是:

  SELECT * 
 FROM 'versions' 
GROUP BY 'program' 
ORDER BY MAX('ID') DESC

我想要做的是让 MySQL 先执行 ORDER BY,执行 GROUP BY,但它坚持先执行 GROUP BY,然后再执行 ORDER BY.即它是对分组的结果进行排序,而不是对排序的结果进行分组.

当然不能写

SELECT * FROM 'versions' ORDER BY 'ID' DESC GROUP BY 'program'

谢谢.

推荐答案

只要 (program,id) 上有一个复合索引,这应该可以做到并且工作得很好.子查询应该只检查每个程序分支的第一个 id,并从外部查询中快速检索所需的记录.

select v.*
from
(
 select program, MAX(id) id
 from versions
 group by program
) m
inner join versions v on m.program=v.program and m.id=v.id

好了关于在没有子查询的 MySQL 中,ORDER BY 优先于 GROUP BY的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。