【发布时间】:2022-11-30 19:04:00
【问题描述】:
我有带有 end_date 列的用户表,如果用户处于活动状态,则该列为 NULL,如果用户不再处于活动状态,则它具有日期时间
我想对来自同一国家和城市的用户进行分组,并显示有关 active 用户的信息,以及另一列 non-active 用户,但仅显示过去 12 个月的非活跃用户。
我有 2 个单独的查询:
-
对于活跃用户:
SELECT SUM(CASE WHEN end_date IS NULL THEN 1 ELSE 0 END) AS active, country, city FROM user_data_table GROUP BY country, city -
对于过去 12 个月的非活跃用户:
SELECT SUM(CASE WHEN end_date IS NULL THEN 0 ELSE 1 END) AS not_active, country, city FROM user_data_table WHERE end_date BETWEEN ? AND ? GROUP BY country, city我试过 Unions 但没有用,我试过子查询但也没有用
结果应该是这样的:
country | city | active(all time) | not active(past year) ------------|-----------|------------------|----------------------- Sweden | Stockholm | 25 | 1 Switzerland | Bern | 43 | 13
【问题讨论】:
-
你不能把两个 SUM(CASE) 放在同一个 SELECT 语句中吗?您需要将 end_date 范围放在 CASE 中而不是 WHERE 子句的一部分
标签: sql sql-server