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

如何编写SQL查询并排展示会员与临时用户的统计数量

解决SQL中两类用户数量并排统计的问题

问题分析

你第二个查询的统计结果相同,核心原因是COUNT函数的特性:COUNT会统计所有非NULL值,当member_casual = "member"不成立时,这个表达式返回FALSE(而非NULL),所以COUNT会把每一行都计入统计,最终两个COUNT结果都是表的总行数,和实际分类数量不符。

第一个查询用UNION ALL会把两个结果上下拼接,得到两行数据,自然无法实现并排展示的需求。

正确写法

方法1:使用SUM + CASE WHEN(通用所有SQL方言)

SELECT 
  SUM(CASE WHEN member_casual = 'member' THEN 1 ELSE 0 END) AS member_count,
  SUM(CASE WHEN member_casual = 'casual' THEN 1 ELSE 0 END) AS casual_count
FROM `ascendant-yeti-415121.cyclistic_capstone_data.divvy_data_2023`

原理:CASE WHEN会对每一行判断,满足条件返回1,否则返回0,SUM累加后就是对应类别的用户总数。

方法2:简化SUM写法(适用于BigQuery等支持布尔值转数值的方言)

因为你的数据表是BigQuery格式,BigQuery会把布尔值TRUE转成1,FALSE转成0,所以可以直接写:

SELECT 
  SUM(member_casual = 'member') AS member_count,
  SUM(member_casual = 'casual') AS casual_count
FROM `ascendant-yeti-415121.cyclistic_capstone_data.divvy_data_2023`

补充:分组转置写法(可选)

也可以先通过GROUP BY得到分组统计,再用PIVOT转成列(BigQuery支持):

SELECT *
FROM (
  SELECT member_casual
  FROM `ascendant-yeti-415121.cyclistic_capstone_data.divvy_data_2023`
)
PIVOT (
  COUNT(*) FOR member_casual IN ('member' AS member_count, 'casual' AS casual_count)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:52:46