mysql - MySQL 中的行项目数
问题描述
我有一个复杂的查询连接到多个表以显示“交易历史”,我想要一种快速简便的方法来order_id
计算line_number
. 我用代码完成了它,但出于性能原因,我想用 MySQL 完成它。这是我所拥有的一个例子:
order_id item_id
--------- --------
1111111 444444
1111111 555555
1111111 666666
1111112 123333
1111112 121111
1111113 123123
1111114 123123
1111115 123123
这就是我想要的样子:
order_id line_number item_id
--------- ------------ ---------
1111111 1 444444
1111111 2 555555
1111111 3 666666
1111112 1 123333
1111112 2 121111
1111113 1 123123
1111114 1 123123
1111115 1 123123
我试过COUNT(order_id)
了,但没有奏效,除非有好的方法。谢谢!
MySQL 版本 5.5.43
解决方案
在 MySQL 8.0 中,只需使用row_number()
:
select
order_id,
row_number() over(partition by order_id order by item_id) line_number,
item_id
from mytable
order by order_id, item_id
在早期版本中,一种解决方案(除了使用变量)是使用子查询进行内联计数:
select
order_id,
(
select 1 + count(*)
from mytable t1
where t1.order_id = t.order_id and t1.item_id < t.item_id
) line_number,
item_id
from mytable t
order by order_id, item_id
推荐阅读
- python - Markdown:注册模式的处理订单
- python - 检查多边形是否以匀称的方式接壤并不一致地工作
- c# - 如何将生成的 HTML 范围报告转换为 PDF
- python - 将具有特定索引的所有行移动到单行中
- msdeploy - ARM 模板中的函数 MSDeploy 和事件网格订阅竞争条件
- python - Pyspark:如何应用该函数来获取数据框中的斜率?
- android - 单击 Listview 中的项目时,如何在新活动中从 Firebase 检索数据?
- django - 如何从 Django 用户视图中删除重要日期部分?
- jquery-select2 - 如果记录数量很大,APEX-Select2 的工作速度会很慢
- reactjs - Electron .AppImage 分发应用,从网站下载时无法打开