这是我的桌子:
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
答案 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;