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

如何合并两个按国家城市分组的用户活跃与非活跃统计SELECT查询?

合并用户活跃与近12个月非活跃统计的SQL方案

需求说明

现有user_data_table用户表,规则如下:

  • end_date为NULL:用户处于活跃状态
  • end_date存在日期值:用户已非活跃

需要按country(国家)和city(城市)分组,同时输出:

  1. 全时段活跃用户数量
  2. 近12个月内变为非活跃的用户数量

原问题分析

你之前写了两个独立查询,但用UNION或子查询合并失败——原因是UNION用于合并行记录,而我们需要在同一行中展示两组统计值,因此可以通过单次分组+多条件聚合直接实现。

合并后的SQL查询

SELECT
    country,
    city,
    SUM(CASE WHEN end_date IS NULL THEN 1 ELSE 0 END) AS `active(all time)`,
    SUM(CASE WHEN end_date IS NOT NULL AND end_date BETWEEN ? AND ? THEN 1 ELSE 0 END) AS `not active(past year)`
FROM user_data_table
GROUP BY country, city
ORDER BY country, city;

代码说明

  • 无需拆分两次查询,在同一个SELECT中通过两个CASE语句分别计算两类用户数
  • 第一个SUM(CASE...)统计所有end_date为NULL的活跃用户(全时段)
  • 第二个SUM(CASE...)筛选出end_date非空且在指定日期范围内的非活跃用户(近12个月)
  • 最终按country和city分组,直接得到你需要的结果格式

预期结果示例

countrycityactive(all time)not active(past year)
瑞典斯德哥尔摩251
瑞士伯尔尼4313

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:31