当前位置: 首页 > 面试题库 >

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

鲁洋
2023-03-14
问题内容

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

  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,但是它坚持先执行GR​​OUP 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


 类似资料:
  • 如果您说这是不可能的,那么我必须坚持HQL,我会在这里张贴的查询,我将需要您的帮助写下基于HQL的类(表)创建和基于HQL的查询字符串。 此外,如果您可以,请给我一个示例查询与夫妇或3个表联接,以及如何设置参数的SQL。

  • 问题内容: 我在(数据库中)使用列。实际上,我使用类似 如果没有本机查询机制,是否可能像这样进行查询?(如findBy) 在此先感谢您的帮助 ;) 问题答案: 我解决了我的问题。 我找到了DQL的扩展名。

  • 问题内容: 我正在为朋友构建一个小型聊天应用程序,但不确定如何及时获取信息,而这不像强制刷新页面那样手动或基本。 目前,我正在使用简单的AJAX来实现此功能,但是这样做的缺点是,在经过短计时器后会定期命中服务器。 在研究长/短轮询时,我遇到了HTML5 WebSockets。这 似乎 很容易实现,但是我不确定是否存在一些隐藏的缺点。例如,我认为WebSockets仅受某些浏览器支持。我应该知道We

  • 问题内容: 我有一个MySQL数据库,其中表A与表B具有一对多关系,我想选择表B中表A中没有子项的所有行。 和 两者似乎都很慢。是否有更快的查询来实现相同的目的? 如果这是相关的,在我的数据库中,表A大约有500,000行,表B大约有3到4百万行。 编辑: 对于我的数据库中的实际表,解释给我: 为了 和 为了 在我的情况下,frontend_form471是表A,SchoolData是表B Edi

  • 问题内容: 我试图添加一个 检查约束 ,但到目前为止,我只是失败了。解决这个问题的方法是什么: 讯息1046,第15级,州1,第6行 在这种情况下,不允许子查询。仅允许标量表达式。 这是代码: 问题答案: SQL Server当前不支持CHECK CONSTRAINT的子查询 。 您已经发现,尝试规避子查询限制时,涉及UDF的CHECK约束可能会出现问题。 替代性约束执行策略是 触发过程 和 嵌入

  • 文档说这个库运行在GPU上。如果我功能强大的笔记本电脑没有GPU,我还能运行Deeplearning4J吗?