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

SQL如何按去重PersonId统计多列非空值的总计数

实现方案

你可以通过条件聚合的方式一次查询完成三个字段的去重计数,不需要多次查表,也不需要子查询或union拼接,语句如下:

SELECT
  COUNT(DISTINCT CASE WHEN Hamburger IS NOT NULL THEN PersonId END) AS HamburgerCount,
  COUNT(DISTINCT CASE WHEN Fries IS NOT NULL THEN PersonId END) AS FriesCount,
  COUNT(DISTINCT CASE WHEN Soda IS NOT NULL THEN PersonId END) AS SodaCount
FROM 替换为你的实际表名;

逻辑说明

  • 每个CASE WHEN会先判断对应食品字段是否非空,满足条件就返回当前行的PersonId,不满足则返回NULL
  • COUNT(DISTINCT)在计数时会自动忽略NULL值,同时对非空的PersonId去重,刚好符合统计「订购过对应食品的唯一用户数」的需求
  • 你给出的示例数据执行后返回的结果为:
HamburgerCountFriesCountSodaCount
332

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:03