mysql中有没有一种很好的方法来复制sqlserver函数 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)
一对。
mysql中有没有一种很好的方法来复制sqlserver函数 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)
一对。
20条答案
按热度按时间whhtz7ly16#
无法模拟行数功能。你可能会得到你期望的结果,但在某个阶段你很可能会失望。mysql文档是这么说的:
对于其他语句,例如select,可能会得到预期的结果,但这并不能保证。在下面的语句中,您可能认为mysql将首先计算@a,然后再进行赋值:选择@a@a:=@a+1, ...; 但是,涉及用户变量的表达式的求值顺序尚未定义。
你好,乔治。
vxbzzdmp17#
这允许在mysql中实现row_number()和partition by提供的相同功能
kg7wmglp18#
我将定义一个函数:
然后我可以做:
现在您没有子查询,视图中没有子查询。
yc0p9oo019#
我发现最有效的解决方案是使用如下子查询:
按列划分只是与“=”比较,并用and分隔。order by列将与“<”或“>”进行比较,并用或分隔。
我发现这是非常灵活的,即使它有点昂贵。
dy2hfwbg20#
我想要每对(col1,col2)都有一个最高col3的行。
这是一个groupwise的最大值,是最常见的sql问题之一(因为它看起来应该很简单,但实际上并不是这样)。
我经常选择空的self-join:
“获取表中没有其他行具有匹配的col1,col2具有更高的col3的行。”(您将注意到,如果多行具有相同的col1,col2,col3,则此和大多数其他groupwise maximum解决方案将返回多行。如果这是一个问题,您可能需要一些后处理。)