SQL - 计算多个组
SQL - Counting over several groups
我有一个 ID 重复的交易列表,并且我有购买的商品数量。我需要计算一次购买特定数量商品的次数。
Row
ItmNBR
TQTY
1
123
5
2
123
5
3
123
5
3
456
25
4
456
19
我需要生成这样的输出...
ItmNBR
QTY
Occurance
123
5
3
123
19
1
123
25
1
我可以得到结果的前两列,但是当我尝试对一个分区进行计数时,我最终得到了重复的数字,因为我只查找了 9 个项目,我只计算了其中的行数Cnt是一样的。
TOT_IVO_ITM_QTY
Count(*) OVER (PARTITION BY QTY) AS CNT
FROM dataset
WHERE YEAR(bus_dt) = 2021
AND ITM_NBR IN (12639,12940,12949,12955,13485,13666,43950,631343,1103731)
AND QTY BETWEEN 5 AND 25
ORDER BY ITM_NBR
,QTY
GROUP BY ITM_NBR, TOT_IVO_ITM_QTY```
我想你只是想要 group by
:
select ItmNBR, QTY, count(*)
from t
group by ItmNBR, QTY
order by count(*) desc;
这假设您想要按项目和数量进行计数,这似乎是问题的要点。
我有一个 ID 重复的交易列表,并且我有购买的商品数量。我需要计算一次购买特定数量商品的次数。
Row | ItmNBR | TQTY |
---|---|---|
1 | 123 | 5 |
2 | 123 | 5 |
3 | 123 | 5 |
3 | 456 | 25 |
4 | 456 | 19 |
我需要生成这样的输出...
ItmNBR | QTY | Occurance |
---|---|---|
123 | 5 | 3 |
123 | 19 | 1 |
123 | 25 | 1 |
我可以得到结果的前两列,但是当我尝试对一个分区进行计数时,我最终得到了重复的数字,因为我只查找了 9 个项目,我只计算了其中的行数Cnt是一样的。
TOT_IVO_ITM_QTY
Count(*) OVER (PARTITION BY QTY) AS CNT
FROM dataset
WHERE YEAR(bus_dt) = 2021
AND ITM_NBR IN (12639,12940,12949,12955,13485,13666,43950,631343,1103731)
AND QTY BETWEEN 5 AND 25
ORDER BY ITM_NBR
,QTY
GROUP BY ITM_NBR, TOT_IVO_ITM_QTY```
我想你只是想要 group by
:
select ItmNBR, QTY, count(*)
from t
group by ItmNBR, QTY
order by count(*) desc;
这假设您想要按项目和数量进行计数,这似乎是问题的要点。