ROW_NUMBER() in MySQL(MySQL 中的 ROW_NUMBER())
问题描述
在 MySQL 中是否有一种很好的方法来复制 SQL Server 函数 ROW_NUMBER()?
Is there a nice way in MySQL to replicate the SQL Server function ROW_NUMBER()?
例如:
SELECT
col1, col2,
ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow
FROM Table1
然后我可以,例如,添加一个条件来将 intRow 限制为 1 以获得具有最高 col3 对于每个 (col1, col2) 对.
Then I could, for example, add a condition to limit intRow to 1 to get a single row with the highest col3 for each (col1, col2) pair.
推荐答案
我想要每个 (col1, col2) 对具有单个最高 col3 的行.
I want the row with the single highest col3 for each (col1, col2) pair.
这是一个分组最大值,其中之一最常见的 SQL 问题(因为它看起来应该很简单,但实际上并不简单).
That's a groupwise maximum, one of the most commonly-asked SQL questions (since it seems like it should be easy, but actually it kind of isn't).
我经常喜欢空自连接:
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,大多数其他分组最大解决方案将返回多行.如果这是一个问题,您可能需要进行一些后处理.)
"Get the rows in the table for which no other row with matching col1,col2 has a higher col3." (You will notice this and most other groupwise-maximum solutions will return multiple rows if more than one row has the same col1,col2,col3. If that's a problem you may need some post-processing.)
这篇关于MySQL 中的 ROW_NUMBER()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MySQL 中的 ROW_NUMBER()
基础教程推荐
- 从字符串 TSQL 中获取数字 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
