如何按类型统计服饰库存表中不同用户的各类商品总数量?
服饰库存表分类求和SQL实现方案
你原有SQL的问题在于仅筛选了type为2的鞋子数据,且没有做不同类型的分字段统计,同时SELECT中出现了未分组也未用聚合函数包裹的type字段,在开启严格模式的数据库中会直接执行报错,自然无法得到同时包含衬衫、鞋子两个维度的求和结果。
通用兼容写法(支持所有主流数据库)
采用条件聚合逻辑实现需求,兼容MySQL、PostgreSQL、SQL Server等所有主流数据库:
SELECT Name, SUM(CASE WHEN Type = 3 THEN Quantity ELSE 0 END) AS Shirts, SUM(CASE WHEN Type = 2 THEN Quantity ELSE 0 END) AS Shoes FROM Clothes GROUP BY Name
逻辑说明:
- 按
Name字段分组,对每个用户的库存分别统计 - 统计衬衫数量时,仅当
Type值为3时计入对应Quantity,否则计入0,求和后得到该用户的衬衫总库存 - 统计鞋子数量时,仅当
Type值为2时计入对应Quantity,否则计入0,求和后得到该用户的鞋子总库存
MySQL专属简化写法
如果使用MySQL数据库,可以用IF函数简化条件判断:
SELECT Name, SUM(IF(Type = 3, Quantity, 0)) AS Shirts, SUM(IF(Type = 2, Quantity, 0)) AS Shoes FROM Clothes GROUP BY Name
以上两种写法执行后都可以得到你需要的统计结果。
内容的提问来源于stack exchange,提问作者JohnW2Smith
相关产品推荐
相关产品推荐

