使用group by时SQL计数

时间:2017-11-29 18:24:23

标签: sql sql-server

我有一个包含三列(ItemNo,Size,StockBalance)的表,如下所示:

A1,XS,2
A1,S,0
A1,M,3
A1,L,3
A1,XL,0
A2,XS,5
A2,S,0
A2,M,1
A2,L,3
A2,XL,6

如果我跑

SELECT ItemNo,sum(StockBalance),COUNT(*)FROM StockTable GROUP BY ItemNo

我得到了

A1,8,5 A2,15,5

这很棒,因为我知道我有多少独特物品,每件物品的总库存位置以及每件物品的尺寸数量。

我还想要的是库存中的尺寸数量,即A1为3,而A2则为4。

然后我可以得到一个最终的列,它是库存中的大小百分比,即对于A1,它将是3/5 = 0.6,对于A2,它将是4/5 = 0.8

谢谢!

2 个答案:

答案 0 :(得分:0)

以下查询应该

SELECT 
    ItemNo, SUM(StockBalance) AS Balance, COUNT(*) as Count, SUM(IF(StockBalance > 0, 1, 0)) AS Size 
FROM StockTable 
GROUP BY ItemNo

答案 1 :(得分:0)

你可以尝试

SELECT ItemNo, sum(StockBalance) Total, COUNT(*) Sizes,
COUNT(CASE WHEN StockBalance>0 THEN 1 END) SIZESinSTOCK 
FROM StockTable GROUP BY ItemNo

这将仅考虑StockBalance> 0的记录。

要获得你可以做的最后一栏

SELECT *, 1.*SIZESinSTOCK/Sizes InStockPercent FROM (
  SELECT ItemNo, sum(StockBalance) Total, COUNT(*) Sizes,
  COUNT(CASE WHEN StockBalance>0 THEN 1 END) SIZESinSTOCK 
  FROM StockTable GROUP BY ItemNo) tmp

1.*转换为浮动数字需要SIZESinSTOCK。否则你只能获得0或1作为结果。