首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:如何计算特定顺序中的项

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

Stack Overflow用户
提问于 2018-07-17 17:22:45
回答 3查看 46关注 0票数 0

这是我的桌子:

PACKAGE_ID ITEM_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计数

1 1 1

1 2 2

1 3 3

2 4 1

2 5 2

3 6 1

4 7 1

4 8 2

谢谢!我用的是MariaDb 10.1

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-17 17:24:45

您可以使用subquery

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2018-07-17 17:27:31

您可以使用窗口函数。

代码语言:javascript
复制
SELECT PACKAGE_ID, ITEM_ID
    , ROW_NUMBER() OVER (PARTITION BY PACKAGE_ID ORDER BY PACKAGE_ID, ITEM_ID) AS THE_COUNT
FROM your_table
票数 2
EN

Stack Overflow用户

发布于 2018-07-17 17:28:51

在Pre8.0 MySQL中,最快的方法可能是变量:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51387104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档