这是我的table:包\u id项目\u id1 11 21 32 42 53 64 74 8我需要一个名为count的新列,该列根据包id计数1到n。例如:包id项目id计数1 1 11 2 21 3 32 4 12 5 23 6 14 7 14 8 2谢谢!p、 我用的是mariadb 10.1
olmpazwi1#
你可以用 subquery :
subquery
select *, (select count(1) from table t1 where t1.PACKAGE_ID = t.PACKAGE_ID and t1.ITEM_ID <= t.ITEM_ID ) as COUNT from table t;
ebdffaop2#
你可以使用窗口功能。
SELECT PACKAGE_ID, ITEM_ID , ROW_NUMBER() OVER (PARTITION BY PACKAGE_ID ORDER BY PACKAGE_ID, ITEM_ID) AS THE_COUNT FROM your_table
ylamdve63#
在8.0之前的mysql中,最快的方法可能是变量:
select t.*, (@rn := if(@p = package_id, @rn + 1, if(@p := package_id, 1, 1) ) ) as counter from t cross join (select @rn := 0, @p := -1) params order by package_id, item_id;
显然是一个索引 (package_id, item_id) 会对这个问题有好处。在mysql 8+或类似版本的mariadb中,使用 row_number() :
(package_id, item_id)
row_number()
3条答案
按热度按时间olmpazwi1#
你可以用
subquery
:ebdffaop2#
你可以使用窗口功能。
ylamdve63#
在8.0之前的mysql中,最快的方法可能是变量:
显然是一个索引
(package_id, item_id)
会对这个问题有好处。在mysql 8+或类似版本的mariadb中,使用
row_number()
: