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

加入,分组,订购

蓬兴国
2023-03-14
问题内容

我首先遇到以下查询的问题是该group by子句是在order by:之前执行的:

saved.recipe_id列是由UNIX_TIMESTAMP()

SELECT
    saved.recipe_id,
    saved.`date`,
    user.user_id
FROM saved
    JOIN user
        ON user.id = saved.user_id
GROUP BY saved.recipe_id
ORDER BY saved.`date` DESC

因此,我尝试了带有子查询和其他bs的各种不同可能的解决方案。最后,我在join子句中尝试了一些不同的子查询,女巫要求我将表顺序从from子句更改为join子句。我决定尝试以下方法:

SELECT
    saved.recipe_id,
    saved.`date`,
    user.user_id
FROM user
    JOIN saved
        ON user.id = saved.user_id
GROUP BY saved.recipe_id
ORDER BY saved.`date` DESC

由于某种原因,这似乎可以正确排序但是为什么 呢?
这种变化如何使我的查询比以前更正确地排序?
真的吗 还是只是针对我提出的测试用例而做?


问题答案:

因此,我对以下查询的第一个问题是,group by子句是在order by之前执行的:

这不是问题。这就是SQL的定义方式及其操作方式。将group by创建一个新的行集和order by订单的行。

这里没有订购问题。有一个“ SQL理解”问题。您order by只对查询结果进行排序。这些结果由产生group by,并且联接的顺序与结果无关。

您正在使用一个称为“隐藏列”的MySQL扩展。在这种情况下,您有一个聚合查询,该查询中的select(或havingorder by子句)中的列不是聚合函数(sum(),等等)的一部分,也不是的一部分group by。这是文档中的报价:

MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP
BY子句中命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用此功能来避免不必要的列排序和分组,从而获得更好的性能。但是,这主要在每个组的每个未聚合列中未在GROUP
BY中命名的所有值都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,通过添加ORDER
BY子句不能影响从每个组中选择值。选择值之后,将对结果集进行排序,并且ORDER BY不会影响服务器在每个组中选择哪个值。

大概是您想要与之关联的最新日期和用户。以下查询正确正确地执行了您想要的操作:

SELECT saved.recipe_id, max(saved.`date`) as MostRecentDate,
       substring_index(group_concat(user.user_id), ',', 1) as MostRecentUser
FROM user JOIN
     saved
     ON user.id = saved.user_id
GROUP BY saved.recipe_id
ORDER BY max(saved.`date`) DESC;


 类似资料:
  • 问题内容: 我在PostgreSQL数据库上有两个表,合同和付款。一份合同完成了多次付款。 我有以下两个模型: 我想对每个合同的所有付款进行汇总,并使用以下功能: 但它生成以下查询: 我不要求选择payments.id,因为我必须将其包括在我的汇总或按功能分组中,如错误消息中所述: 可能未处理的SequelizeDatabaseError:错误:列“ payments.id”必须出现在GROUP

  • 我正在评估用作事件总线的不同流媒体/消息服务。我正在考虑的一个方面是每项服务提供的订购保证。我正在探索的两个选项是AWS Kinesis和Kafka,从较高的层次来看,它们似乎都提供了类似的订购保证,其中记录保证以仅在该碎片/分区中发布的相同顺序使用。 AWS Kinesis API似乎公开了父分片的id,因此使用KCL的消费者组可以确保具有相同分区键的记录可以按照发布顺序(假设是单线程发布者)被

  • 我正在尝试使用以下查询根据列的偏序对结果集进行排序: 按左(NAME,2)键从人的顺序中选择ID, NAME 如何编写等效的Hibernate标准/HQL? 我查阅了Hibernate参考手册,没有找到任何与左sql函数相关的内容。我正在开发DB2,hibernate版本是3.2.3。

  • 我正在使用基于Laravel和Twig的OctoberCMS。 我正在尝试使用对数据库中的图像列表进行排序。 我需要显示按日期分组的图像(desc),然后在该日期内按视图排序(desc)。 我在这里阅读是为了使用多个过程。 订货人 成功按Date排序,但忽略按视图排序。可能是因为<码>时间。 群比 返回null。

  • 我目前加入了5个表来选择20个对象显示给用户,不幸的是,如果我使用和,它会变得非常慢。 查询的解释显示如下: 所以看起来它没有为表使用键,分析说明它使用2.7s复制到tmp表。 没有使用或,我尝试使用,但不幸的是,这没有改善。 我想我错过了一些基本的概念在这里和任何帮助将是感激的。 由于很可能是我弄错了表,下面是对表的描述: Objekte laender,regionen,subregionen

  • 本文向大家介绍深入浅析knockout源码分析之订阅,包括了深入浅析knockout源码分析之订阅的使用技巧和注意事项,需要的朋友参考一下 Knockout.js是什么? Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个富文本且具有良好的显示和编辑功能的用户界面。任何时候你的局部UI内容需要自动更新(比如:依赖于