如何针对相同product_id,按flag规则汇总stock列数据
解决方案
你需要调整分组逻辑,不再按flag分组,同时通过聚合函数或条件判断确定最终的flag值,以下是两种可行的SQL写法:
方法一:利用MAX()函数特性
因为字符Y的排序优先级高于N,直接用MAX(flag)就能在同时存在两种标识时返回Y,单一标识时返回对应值,配合SUM(stock)计算总库存:
SELECT product_id, MAX(flag) AS flag, SUM(stock) AS stock FROM stock_table WHERE product_id = 120104 GROUP BY product_id;
方法二:显式条件判断(更通用)
如果担心数据库排序规则差异,可通过CASE语句明确判断是否存在两种标识,再指定flag值:
SELECT product_id, CASE WHEN COUNT(DISTINCT flag) = 2 THEN 'Y' ELSE MAX(flag) END AS flag, SUM(stock) AS stock FROM stock_table WHERE product_id = 120104 GROUP BY product_id;
逻辑说明
- 原查询因同时按
product_id和flag分组,导致同一商品拆分为两行;新查询仅按product_id分组,确保同一商品只返回一行。 - 两种方法都能满足你的规则:存在
Y和N时合并为Y并求和库存,单一标识时直接汇总对应库存。
内容的提问来源于stack exchange,提问作者Patrick Diorio Carvalho
相关产品推荐
相关产品推荐

