sql:如何计算特定顺序中的项

14ifxucb  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(328)

这是我的table:
包\u id项目\u id
1 1
1 2
1 3
2 4
2 5
3 6
4 7
4 8
我需要一个名为count的新列,该列根据包id计数1到n。例如:
包id项目id计数
1 1 1
1 2 2
1 3 3
2 4 1
2 5 2
3 6 1
4 7 1
4 8 2
谢谢!p、 我用的是mariadb 10.1

olmpazwi

olmpazwi1#

你可以用 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;
ebdffaop

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
ylamdve6

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() :

相关问题