You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL仅显示COUNT(SKU)>10的结果并汇总已求和列?

SQL问题解决方案

需求一:仅显示COUNT(SKU) > 10的结果

你之前在WHERE子句里加COUNT(SKU) > 10没用,核心原因是WHERE用于分组前筛选原始行,聚合函数(比如COUNT)是分组后才计算的,这类聚合条件必须用HAVING子句,放在GROUP BY之后执行。

修改后的完整SQL如下:

select 
  loc_code, ship_lab, size_code, sku, COUNT(SKU) as sku_count
from sherwin.prdinv
where sku IN ('B28W8030', 'B20W12651', 'A87W1351', 'B31W4651', 'A6W151') 
  and (loc_code like 'H0%' or loc_code like 'B%')
  and REGEXP_LIKE(SUBSTR(loc_code,3), '^[[:digit:]]+$')
group by loc_code, ship_lab, SKU, size_code
HAVING COUNT(SKU) > 10 -- 在此处添加聚合过滤条件
ORDER BY Loc_code asc;

需求二:对SUM函数求和的列添加总计汇总

假设你的查询包含类似SUM(字段名)的求和列(以下以SUM(stock_qty)作为示例求和列),提供两种常用实现方式:

方式1:用ROLLUP自动生成总计(推荐,支持ANSI SQL的数据库通用)

ROLLUP会在分组结果基础上自动生成小计和总计行,配合GROUPING函数可标记总计行:

select 
  case when GROUPING(loc_code) = 1 then '总计' else loc_code end as loc_code,
  case when GROUPING(ship_lab) = 1 then '' else ship_lab end as ship_lab,
  case when GROUPING(size_code) = 1 then '' else size_code end as size_code,
  case when GROUPING(sku) = 1 then '' else sku end as sku,
  COUNT(SKU) as sku_count,
  SUM(stock_qty) as total_stock -- 示例求和列
from sherwin.prdinv
where sku IN ('B28W8030', 'B20W12651', 'A87W1351', 'B31W4651', 'A6W151') 
  and (loc_code like 'H0%' or loc_code like 'B%')
  and REGEXP_LIKE(SUBSTR(loc_code,3), '^[[:digit:]]+$')
group by ROLLUP(loc_code, ship_lab, SKU, size_code) -- 用ROLLUP替代普通GROUP BY
HAVING COUNT(SKU) > 10 or GROUPING(loc_code) = 1 -- 保留符合条件的分组行和总计行
ORDER BY Loc_code asc;

GROUPING(字段)返回1表示该行是该字段的汇总行,0表示是原始分组行。

方式2:用UNION ALL手动拼接总计行

如果数据库不支持ROLLUP,可以先查询分组结果,再单独计算总计行,用UNION ALL拼接:

-- 分组数据
select 
  loc_code, ship_lab, size_code, sku,
  COUNT(SKU) as sku_count,
  SUM(stock_qty) as total_stock
from sherwin.prdinv
where sku IN ('B28W8030', 'B20W12651', 'A87W1351', 'B31W4651', 'A6W151') 
  and (loc_code like 'H0%' or loc_code like 'B%')
  and REGEXP_LIKE(SUBSTR(loc_code,3), '^[[:digit:]]+$')
group by loc_code, ship_lab, SKU, size_code
HAVING COUNT(SKU) > 10

UNION ALL

-- 总计行
select 
  '总计' as loc_code, '' as ship_lab, '' as size_code, '' as sku,
  COUNT(SKU) as sku_count,
  SUM(stock_qty) as total_stock
from sherwin.prdinv
where sku IN ('B28W8030', 'B20W12651', 'A87W1351', 'B31W4651', 'A6W151') 
  and (loc_code like 'H0%' or loc_code like 'B%')
  and REGEXP_LIKE(SUBSTR(loc_code,3), '^[[:digit:]]+$')
ORDER BY 
  case when loc_code = '总计' then 1 else 0 end, -- 让总计行排在最后
  loc_code asc;

内容的提问来源于stack exchange,提问作者Anthony Armendariz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:15:29