MySql,到目前为止计数一列,并将结果放入另一列

时间:2019-11-14 14:06:42

标签: mysql

表中的3列:id(主键,自动增加),item(varchar),idx(int)。按id选择表顺序,要为每个项目提供序列索引以显示相同值的序列号,然后将索引放在idx列中。结果是这样的:

+--+----+---+
|id|item|idx|
+--+----+---+
|1 |a   |1  | < the 1st a
+--+----+---+
|2 |b   |1  | < the 1st b
+--+----+---+
|3 |b   |2  | < the 2nd b
+--+----+---+
|4 |b   |3  | < the 3rd b
+--+----+---+
|5 |a   |2  | < the 2nd a
+--+----+---+

如何通过选择输出它?

2 个答案:

答案 0 :(得分:1)

一个相关的子查询可以获取具有相同项目且ID等于或小于ID的行数,即使在低于8的版本中也应如此。

SELECT t1.id,
       t1.item,
       (SELECT count(*)
               FROM elbat t2
               WHERE t2.item = t1.item
                     AND t2.id <= t1.id) idx
       FROM elbat t1;

如果item可为空,则可能需要进行一些调整,具体取决于您为NULL item s定义相等性的方式。

答案 1 :(得分:0)

如果使用的是mysql 8,则可以使用窗口函数来执行此操作。

SELECT id, 
    itm, 
    ROW_NUMBER() OVER (PARTITION BY itm ORDER BY id) as idx 
FROM yourtable;