如何在一个SELECT中计算不同值组的行

时间:2017-12-27 10:34:14

标签: mysql

我有一个数据表,其中指标为数字,不是ID或外键。这个数字在表格中重复了几次。

我需要打印包含incremental row number within the same indicator value的所有行,因此1有2次,2有3次,3有1次。

期望的输出:

name | indicator | rownumber
a        1        1
b        1        2
c        2        1
d        2        2
e        2        3
f        3        1

我找到this解决方案来计算行数,但如果指标发生变化,我不知道如何重置计数器。

我到目前为止的查询是,但这是逐步计算行

SELECT name, indicator, 
@rownum := @rownum + 1 as row_number
FROM rownumtable
CROSS JOIN (SELECT @rownum := 0) r
ORDER BY name ASC

但它会打印行号 - 请在SQL Fiddle

上查看
name | indicator | row_number
a         1         1
b         1         2
c         2         3
d         2         4
e         2         5
f         3         6

有没有办法如何在MySQL查询中为特定的相同值组重置row_number计数器?

1 个答案:

答案 0 :(得分:1)

SELECT name, indicator,        
       @rownum := case when @prevIndicator <> indicator then 1 else @rownum + 1 end as rownumber,
       @prevIndicator := indicator
FROM rownumtable
CROSS JOIN (SELECT @rownum := 0, @prevIndicator := 0) r
ORDER BY name ASC

SQLFiddle demo