SQL:如何按特定顺序计数项目

时间:2018-07-17 17:22:46

标签: mysql sql mariadb

这是我的桌子:


PACKAGE_IDITEM_ID
1 1
1 2
1 3
2 4
2 5
3 6
4 7
4 8

我想要一个称为count的新列,该列根据软件包ID从1到N。例如:

PACKAGE_ID ITEM_ID COUNT个
1 1 1
1 2 2
1 3 3
2 4 1
2 5 2
3 6 1
4 7 1
4 8 2

谢谢! ps:我正在使用MariaDb 10.1

3 个答案:

答案 0 :(得分:2)

您可以使用窗口功能。

SELECT PACKAGE_ID, ITEM_ID
    , ROW_NUMBER() OVER (PARTITION BY PACKAGE_ID ORDER BY PACKAGE_ID, ITEM_ID) AS THE_COUNT
FROM your_table

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以使用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;