表中的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
+--+----+---+
如何通过选择输出它?
答案 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;