gpt4 book ai didi

mysql - 分组依据 - 覆盖结果中每个组下决定行的默认行为

转载 作者:行者123 更新时间:2023-11-29 14:57:13 25 4
gpt4 key购买 nike

从这个问题进一步延伸Query to find top rated article in each category -

考虑同一张表 -

id | category_id | rating
---+-------------+-------
1 | 1 | 10
2 | 1 | 8
3 | 2 | 7
4 | 3 | 5
5 | 3 | 2
6 | 3 | 6

有一个表articles,其中包含字段id、评分(1-10之间的整数)和category_id(表示所属类别的整数)。如果我有相同的目标,即在每个查询中获得评分最高的文章(这应该是结果):-

期望的结果

id | category_id | rating
---+-------------+-------
1 | 1 | 10
3 | 2 | 7
6 | 3 | 6

原始问题的扩展
但是,运行以下查询 -

SELECT id, category_id, max( rating ) AS max_rating 
FROM `articles`
GROUP BY category_id

结果如下,其中除 id 字段之外的所有内容均符合要求。我知道如何使用子查询来做到这一点 - 正如在同一问题中所回答的 - Using subquery .

id  category_id     max_rating
1 1 10
3 2 7
4 3 6

一般而言
不包括分组列 (category_id) 和计算列(返回聚合函数结果的列,例如 SUM()MAX() 等。 -在本例中为 max_ rating),其他字段中返回的值只是每个分组结果集下的第一行(在本例中按 category_id 分组)。例如。 id =1 的记录是 category_id 1 下表格中的第一个记录(category_id 下的 id 1 和 2 > 1) 所以它被返回。

我只是想知道是否无法以某种方式克服这种默认行为以根据条件返回行?如果mysql可以对每个分组结果集执行计算(执行MAX()计数等),那么为什么它不能返回与最大评级相对应的行。是否无法在没有子查询的情况下在单个查询中执行此操作?在我看来,这是一个常见的要求。

更新
我也无法从 Naktibalda 的解决方案中弄清楚我想要什么。再次提一下,我知道如何使用子查询来做到这一点,正如 OMG Ponies 再次回答的那样。

最佳答案

用途:

SELECT x.id,
x.category_id,
x.rating
FROM YOUR_TABLE x
JOIN (SELECT t.category_id,
MAX(t.rating) AS max_rating
FROM YOUR_TABLE t
GROUP BY t.category_id) y ON y.category_id = x.category_id
AND y.max_rating = x.rating

关于mysql - 分组依据 - 覆盖结果中每个组下决定行的默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294486/

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