首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中顶N的求和

SQL中顶N的求和
EN

Stack Overflow用户
提问于 2018-02-13 12:44:08
回答 1查看 169关注 0票数 0

我有一张销售表,上面有个人、日期和数量:

代码语言:javascript
复制
Person   Date      Qty
Jim     2016-08-01  1
Jim     2016-08-02  3
Jim     2016-08-03  2
Sheila  2016-08-01  1
Sheila  2016-08-02  1
Sheila  2016-08-03  1
Bob     2016-08-03  6
Bob     2016-08-02  2
Bob     2016-08-01  5

我可以使用以下代码按日期对前2名进行排名:

代码语言:javascript
复制
/****** Top 2 Salespersons  ******/
SELECT * 
FROM(
    SELECT * ,
    ROW_NUMBER() OVER( PARTITION BY [Date] 
    ORDER BY Qty DESC) N'Rank' 
    FROM [Coinmarketcap].[dbo].[sales]
    GROUP BY [Date], Person, Qty
    ) AS NewTable
WHERE NewTable.Rank  < 3

Person     Date    Qty Rank
Bob     2016-08-01  5   1
Jim     2016-08-01  1   2
Jim     2016-08-02  3   1
Bob     2016-08-02  2   2
Bob     2016-08-03  6   1
Jim     2016-08-03  2   2

我的两个问题是:

1)我如何才能看到每个日期前2名的总数量,例如:

代码语言:javascript
复制
Date       Total Qty
2016-08-01    6
2016-08-02    5
2016-08-03    8

2)如何获得不同等级组的每日总数量,例如:

代码语言:javascript
复制
Date         Ranking Group    Total Qty
2018-08-01     1-2               6 
2018-08-01     3-4               1 
2018-08-01     5-6               0
2018-08-02     1-2               5 
2018-08-02     3-4               1 
2018-08-02     5-6               0
2018-08-03     1-2               8 
2018-08-03     3-4               1 
2018-08-03     5-6               0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 13:04:31

第一:

代码语言:javascript
复制
SELECT NewTable.Date, Sum(NewTable.Qty) 
FROM(
    SELECT * ,
    ROW_NUMBER() OVER( PARTITION BY [Date] 
    ORDER BY Qty DESC) N'Rank' 
    FROM [Coinmarketcap].[dbo].[sales]
    GROUP BY [Date], Person, Qty
    ) AS NewTable
WHERE NewTable.Rank  < 3
group by NewTable.Date

第二次尝试如下:

代码语言:javascript
复制
SELECT NewTable.Date, 
       Trunc((NewTable.Rank - 1) / 2) * 2 + 1, -- lower rank
       Trunc((NewTable.Rank - 1) / 2) * 2 + 2, -- upper rank
       Sum(NewTable.Qty) 
FROM(
    SELECT * ,
    ROW_NUMBER() OVER( PARTITION BY [Date] 
    ORDER BY Qty DESC) N'Rank' 
    FROM [Coinmarketcap].[dbo].[sales]
    GROUP BY [Date], Person, Qty
    ) AS NewTable
group by NewTable.Date, 
         Trunc((NewTable.Rank - 1) / 2) * 2 + 1,
         Trunc((NewTable.Rank - 1) / 2) * 2 + 2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48767136

复制
相关文章

相似问题

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