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

如何在无子查询的SQL分组查询中提取指定值并聚合?

问题描述

现有STORE表,结构包含fruit、color、stock字段,数据如下:

fruitcolorstock
applered30
applegreen5
bananayellow40
berryred5
peargreen5

需要执行SQL语句:SELECT SUM(stock), [?] FROM store GROUP BY fruit,其中[?]需提取指定具体值(例如RED),同时apple对应的SUM(stock)需得到35(即该水果所有库存的总和),期望结果如下:

Column AColumn B
35red

询问能否无需子查询实现该需求,曾尝试使用STRING_AGG函数,但认为并非最优方案。


解决方案

可以不用子查询实现,核心用条件聚合函数就能精准满足需求,比STRING_AGG更高效直接:

方法:MAX(CASE WHEN ...) 条件取值

这个逻辑是:按水果分组后,仅当该水果存在指定颜色(比如red)时,返回该颜色值;同时计算该水果的总库存。如果不需要所有水果的结果,还可以加WHERE过滤目标水果:

SELECT 
  SUM(stock) AS "Column A",
  MAX(CASE WHEN color = 'red' THEN color END) AS "Column B"
FROM store
GROUP BY fruit
-- 可选:仅获取apple的结果时添加
WHERE fruit = 'apple';

针对apple的执行结果完全符合预期:

Column AColumn B
35red

为什么比STRING_AGG更优?

  • STRING_AGG会把该水果的所有颜色拼接成字符串(比如apple会得到red,green),需要额外处理才能提取指定颜色,逻辑冗余且效率更低。
  • 条件聚合直接精准匹配目标颜色,计算逻辑简单,执行效率更高,完全贴合需求。

内容的提问来源于stack exchange,提问作者Adrian Tari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:45:29