SQL实现同服务行的Qty求和及完整字段展示需求
解决方案:合并相同Service行并计算汇总值
因为每个Service_name对应的Ident和Price是唯一的,我们只需要调整GROUP BY子句,把这些字段纳入分组(或者用聚合函数提取),同时完成Qty汇总和总Value的计算即可。
方法一:标准GROUP BY写法(推荐)
这种写法适用于绝大多数数据库(MySQL、PostgreSQL、SQL Server等),逻辑清晰且符合SQL标准:
SELECT Service_name, Ident, Price, SUM(Qty) AS Total_Qty, SUM(Qty) * Price AS Total_Value FROM NewOne GROUP BY Service_name, Ident, Price;
- 把
Ident和Price加入GROUP BY后,分组逻辑不会被破坏(因为同Service下这两个字段值一致) SUM(Qty)得到该Service的总数量,乘以Price直接算出总价值Total_Value
方法二:用聚合函数提取固定值
如果不想在GROUP BY中添加过多字段,也可以用MAX()或MIN()提取同Service下固定的Ident和Price(因为值唯一,两种聚合函数结果相同):
SELECT Service_name, MAX(Ident) AS Ident, MAX(Price) AS Price, SUM(Qty) AS Total_Qty, SUM(Qty) * MAX(Price) AS Total_Value FROM NewOne GROUP BY Service_name;
原SQL的问题在于只聚合了Qty,没有保留Ident、Price字段,也没有计算总价值,上述两种写法都能满足你的需求,推荐第一种标准写法,可读性更强。
内容的提问来源于stack exchange,提问作者Kart28
相关产品推荐
相关产品推荐

