MySQL:按字段递增

MySQL: Increment column by field

我正在尝试创建某种列表 的水果。我想创建一个临时列 increment_value 来计算按类型插入了多少水果。

我有这个水果table:

+----------+------------+
| fruit_id | fruit_name | 
+----------+------------+
| 5        | Apple      | 
| 8        | Banana     | 
| 8        | Banana     | 
| 5        | Apple      | 
| 5        | Apple      | 
+----------+------------+

想要的结果:

+----------+------------+-----------------+
| fruit_id | fruit_name | increment_value |
+----------+------------+-----------------+
| 5        | Apple      | 1               |
| 8        | Banana     | 1               |
| 8        | Banana     | 2               |
| 5        | Apple      | 2               |
| 5        | Apple      | 3               |
+----------+------------+-----------------+

我尝试使用虚拟 table 但失败了:DEMO

如何获得我想要的table?

您可以使用 row_number():

select f.*,
       row_number() over (partition by fruit_name order by fruit_name) as seqnum
from fruits f;

注意:SQL 表和结果集表示 无序 集,因此顺序不确定。您可以通过更改 order by 子句来调整顺序。

您可以简单地按查询分组:

SELECT fruit_id, fruit_name, SUM(fruit_id) as increment_value
FROM fruits
GROUP BY fruit_id;

感谢@Gordon 的回复。我从 中汲取灵感。 我为 MySQL 5.7.

写了这篇文章
SELECT  
    fruits.*,
    @row_num :=IF(@prev_value= fruit_id, @row_num+1 , 1)AS RowNumber,
    @prev_value := fruit_id
FROM fruits
CROSS JOIN (SELECT @row_num :=1,  @prev_value :=0) vars
ORDER BY fruit_id

谢谢大家的帮助!