You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL计算列:如何用CASE条件汇总含指定多个单词的行

用CASE条件语句实现多单词匹配并汇总数据

嘿,这个需求我之前做销售报表的时候刚好遇到过,用CASE配合聚合函数就能完美解决。我给你拆解下具体怎么操作,分场景给你举例子,你一看就懂。

基础思路

核心逻辑是:先用CASE语句标记出符合条件(包含目标单词)的行,再用SUM/COUNT这类聚合函数对标记后的行做汇总。根据你是要合并汇总多个单词,还是分别汇总每个单词,写法略有不同。

场景1:把多个单词归为同一类别,合并汇总

比如你有一个orders表,想把包含“笔记本”或“台式机”的订单归为「电脑类」,然后汇总它们的总销售额,其他订单归为「其他类」。代码可以这么写:

SELECT
  -- 用CASE标记类别
  CASE
    -- 匹配多个单词,用OR连接
    WHEN product_description LIKE '%笔记本%' OR product_description LIKE '%台式机%' THEN '电脑类产品'
    ELSE '其他产品'
  END AS product_category,
  -- 对符合类别的行汇总销售额
  SUM(sales_amount) AS total_sales,
  COUNT(*) AS order_count
FROM orders
-- 按标记的类别分组汇总
GROUP BY product_category;

这里要注意:

  • 如果你需要模糊匹配(比如字段里包含目标单词就行),用LIKE '%关键词%';如果是精确匹配(字段值完全等于某个关键词),直接用= '关键词',多个精确匹配可以用IN ('词1', '词2')更高效。
  • 部分数据库(比如PostgreSQL)的LIKE是区分大小写的,如果你不区分大小写,可以用LOWER(product_description) LIKE '%laptop%'统一转成小写再匹配。

场景2:分别汇总每个单词对应的数值

如果要单独统计“笔记本”和“台式机”各自的销售额,不需要合并类别,可以把CASE嵌套在SUM里面:

SELECT
  -- 只汇总包含“笔记本”的行的销售额
  SUM(CASE WHEN product_description LIKE '%笔记本%' THEN sales_amount ELSE 0 END) AS laptop_sales,
  -- 只汇总包含“台式机”的行的销售额
  SUM(CASE WHEN product_description LIKE '%台式机%' THEN sales_amount ELSE 0 END) AS desktop_sales,
  -- 汇总不属于以上两类的销售额
  SUM(CASE 
        WHEN product_description NOT LIKE '%笔记本%' 
          AND product_description NOT LIKE '%台式机%' 
        THEN sales_amount ELSE 0 
      END) AS other_sales
FROM orders;

这个写法的好处是,一行SQL就能输出所有类别汇总结果,不用分组,适合做总览报表。

补充:精确匹配的简化写法

如果你的需求是精确匹配字段值等于多个关键词中的一个(比如product_type字段直接是“笔记本”或“台式机”),可以不用CASE,直接用WHERE过滤后分组汇总,更高效:

SELECT
  product_type,
  SUM(sales_amount) AS total_sales
FROM orders
WHERE product_type IN ('笔记本', '台式机')
GROUP BY product_type;

这种写法比CASE更简洁,数据库执行效率也更高,能满足需求的话优先用这个。

内容的提问来源于stack exchange,提问作者Jonathan Livingston Seagull

火山引擎 最新活动