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

如何在单条SELECT语句中实现多条件多列计数统计?

在单条SQL中实现多条件统计的方法

嘿,这个需求其实很常见,咱们可以用CASE WHEN搭配聚合函数(比如SUM()或COUNT())来轻松实现——这样就能在一条查询里同时算出多个带特定条件的统计结果,每个结果还能通过AS自定义命名,完美匹配你的需求!

核心原理

普通的WHERE子句会过滤掉所有不符合条件的行,没法同时统计多个不同条件的结果。而CASE WHEN可以针对每一行数据判断是否满足某个特定条件:

  • 满足条件时返回1(或者非NULL值)
  • 不满足时返回0(或者NULL)
    再用聚合函数把这些值汇总,就能得到符合条件的行数。

基础示例

假设你有一张名为your_table的表,想要统计:

  • 列col1等于'value1'的行数
  • 列col2等于'value2'的行数
  • 同时满足col1='value1'且col2='value2'的行数

对应的SQL可以这么写:

SELECT
  -- 统计col1=value1的数量,用SUM+CASE WHEN
  SUM(CASE WHEN col1 = 'value1' THEN 1 ELSE 0 END) AS col1_value1_count,
  -- 统计col2=value2的数量,用COUNT+CASE WHEN(COUNT会忽略NULL)
  COUNT(CASE WHEN col2 = 'value2' THEN 1 END) AS col2_value2_count,
  -- 统计同时满足两个条件的数量
  SUM(CASE WHEN col1 = 'value1' AND col2 = 'value2' THEN 1 ELSE 0 END) AS both_match_count
FROM your_table;

分组统计扩展

如果需要按某列(比如日期create_time)分组,统计每个分组下的多条件数据,只需要加上GROUP BY子句即可:

SELECT
  create_time,
  SUM(CASE WHEN col1 = 'value1' THEN 1 ELSE 0 END) AS col1_value1_count,
  COUNT(CASE WHEN col2 = 'value2' THEN 1 END) AS col2_value2_count
FROM your_table
GROUP BY create_time;

注意事项

  • 替换示例中的your_table、col1、col2以及条件值为你实际的表名、列名和业务条件即可。
  • SUM()和COUNT()的区别:SUM(CASE...)用1和0计算总和;COUNT(CASE...)只统计非NULL值,所以不满足条件时可以省略ELSE(默认返回NULL),效果和SUM一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:53:49