繁体   English   中英

两个SELECT语句作为两列

[英]Two SELECT statements as two columns

这似乎是一个简单的查询,但是我正在努力。

这是我的数据样本。

user_id  dated
463      2016-01-01
463      2016-01-02
1456     2016-01-01
1456     2016-01-02
1398     2015-12-01
1398     2015-12-02

我想获取两个不同时间段的唯一身份用户数。 这是我想从一行和两列中获得组合输出的查询。

-- 60
SELECT COUNT(DISTINCT(tld.user_id)) count_active_users_60
FROM table tld
WHERE tld.dated BETWEEN (NOW() - INTERVAL '60 days') AND (NOW() - INTERVAL '30 days')

-- 30
SELECT COUNT(DISTINCT(tld.user_id)) count_active_users_30
FROM table tld
WHERE tld.dated >= NOW() - INTERVAL '30 days'

我想要一个看起来像这样的输出:

count_active_users_60    count_active_users_30
1                        2

我一直在弄乱各种CASE语句和子选择,但是distinct子句让我失望。

SELECT COUNT(DISTINCT(rar.user_id))
FROM 
(
SELECT user_id,
COUNT(CASE WHEN tld.dated BETWEEN (NOW() - INTERVAL '60 days') AND (NOW() - INTERVAL '30 days') THEN 1 ELSE NULL END) AS count_active_users_60,
COUNT(CASE WHEN tld.dated >= NOW() - INTERVAL '30 days' THEN 1 ELSE NULL END) AS count_active_users_30
FROM testing_login_duration tld
GROUP BY user_id
) rar;

使用条件聚合:

SELECT COUNT(DISTINCT CASE WHEN tld.dated BETWEEN (NOW() - INTERVAL '60 days') AND (NOW() - INTERVAL '30 days')
                           THEN tld.user_id
                       END) count_active_users_60,
       COUNT(DISTINCT CASE WHEN tld.dated >= NOW() - INTERVAL '30 days'
                           THEN tld.user_id
                       END) count_active_users_30
FROM table tld
WHERE tld.dated >= NOW() - INTERVAL '60 days';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM