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
谢谢大家的帮助!
我正在尝试创建某种列表 的水果。我想创建一个临时列 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 的回复。我从
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
谢谢大家的帮助!