gpt4 book ai didi

mysql - 为什么我运行 group by 和 order by 时结果不合适?

转载 作者:行者123 更新时间:2023-11-29 18:41:46 25 4
gpt4 key购买 nike

我的查询是这样的:

SELECT *
FROM products_categories
WHERE product_id = 1
ORDER BY updated_at DESC

如果查询运行,结果如下:

enter image description here

我像这样添加分组:

SELECT *
FROM products_categories
WHERE product_id = 1
GROUP BY product_id
ORDER BY updated_at DESC

结果:显示1条记录(id=1)

不适合。如果显示的 ID 为 id = 3(最新更新_at)

如何解决?

最佳答案

不幸的是,你被 mysql 的奇怪行为所困(其他一些 SQL 引擎,如 sqlite 也这样做)。根据 sql98,您的 sql 查询不正确,应该会产生错误。您无法选择未分组或未使用聚合函数(最大/最小/平均值)的字段。不幸的是,mysql 不会产生错误,但会返回定义错误的字段的第一个值。

分组依据会将具有相同product_id 的所有行合并为单行。这就是为什么你会返回 1 行(错误)。我想您认为 order by 将在 group by 之前先运行。不是这种情况。单个(分组依据)行将被排序。

如果你想获取最新的updated_at,你应该查询:select max(updated_at) from products_categories WHERE Product_id = 1 ,然后查询在另一个选择中使用该值的行。 (select * from products_categories where products_id=1 and Updated_at = (select max(updated_at) from products_categories where products_id=1)) 当然,如果您的 Updated_at 值不唯一,它可能无法按预期工作。然后你会得到多个结果。

如果您只需要一个答案行,您可以这样做从产品类别中选择 *WHERE Product_id = 1 ORDER BY Updated_at DESC LIMIT 1;

关于mysql - 为什么我运行 group by 和 order by 时结果不合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com