SQL 查询查找按 ID 分组的最大列值
本文解决了从列中高效检索最高值的问题,该列按数据库表中的唯一 ID 进行分组。 我们用“SCORES”表来说明:
<code>ID ROUND SCORE 1 1 3 1 2 6 1 3 2 2 1 10 2 2 12 3 1 6</code>
我们的目标是获取包含每个“ID”的最大“ROUND”值的行及其相应的“SCORE”。所需的输出是:
<code>ID ROUND SCORE 1 3 2 2 2 12 3 1 6</code>
虽然子查询方法是可能的,但对于大型数据集来说它可能效率低下。 更好的方法是利用窗口函数:
SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
此查询利用 max(round) OVER (PARTITION BY id)
来确定每个“ID”的最大“ROUND”。 first_value(score) OVER (PARTITION BY id ORDER BY round DESC)
然后检索与最大“ROUND”相关的“SCORE”。 DISTINCT
确保每个“ID”仅返回一行。
这种窗口函数方法避免了多次表扫描,为大型数据库提供了显着更有效的解决方案。
以上是如何在SQL中高效检索按ID分组的列的最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!