小编典典

MySQL 中的 ROW_NUMBER()

all

MySQL 中是否有一种复制 SQL Server 功能的好方法ROW_NUMBER()

例如:

SELECT 
    col1, col2, 
    ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow
FROM Table1

然后,例如,我可以添加一个限制为 1 的条件,以获得每对intRow最高的单行。col3``(col1, col2)


阅读 71

收藏
2022-04-15

共1个答案

小编典典

我想要每个 (col1, col2) 对具有最高 col3 的行。

这是一个groupwise maximum,是最常见的 SQL 问题之一(因为它看起来应该很容易,但实际上并非如此)。

我经常为 null-self-join 感到高兴:

SELECT t0.col3
FROM table AS t0
LEFT JOIN table AS t1 ON t0.col1=t1.col1 AND t0.col2=t1.col2 AND t1.col3>t0.col3
WHERE t1.col1 IS NULL;

“设置表中没有与 col1,col2 匹配的其他行具有更高 col3 的行。”(您会注意到这一点,如果多行具有相同的
col1,大多数其他分组最大解决方案将返回多行,col2,col3。如果这是一个问题,您可能需要进行一些后期处理。)

2022-04-15