在多个条件下对单个列计算 DISTINCT
Count DISTINCT on a single column over multiple conditions
我有一个 table,我想获取特定时间段内用户名的 DISTINCT
计数。目前我 运行 这个查询
SELECT DISTINCT username FROM user_activity WHERE company_id = 9 AND timestamp BETWEEN '2015-09-00' AND '2015-10-01' AND action = "Login Success";
效果很好,但是,我有多家公司想要 select 计数。如何扩展之前的查询以显示多家公司的不同计数?
select count(distinct username),
sum(case when company_id = 1 then 1 else 0 end) A,
sum(case when company_id = 9 then 1 else 0 end) B
from `user_activity` Where timestamp BETWEEN '2015-09-00' AND '2015-10-01' AND action = "Login Success"
我做过类似的事情,但是,我没有得到正确的数字。理想情况下,我想将每个计数列为不同的值以便于阅读,就像前面的查询所说明的那样。我不需要 count(distinct username)
列出现在我的结果中,只需要条件。
提前致谢。
如果您不介意两行而不是两列:
SELECT company_id, COUNT(DISTINCT username)
FROM user_activity
WHERE company_id IN (1,9)
AND timestamp >= '2015-09-01'
AND timestamp < '2015-09-01' + INTERVAL 1 MONTH
AND action = "Login Success"
GROUP BY company_id
我有一个 table,我想获取特定时间段内用户名的 DISTINCT
计数。目前我 运行 这个查询
SELECT DISTINCT username FROM user_activity WHERE company_id = 9 AND timestamp BETWEEN '2015-09-00' AND '2015-10-01' AND action = "Login Success";
效果很好,但是,我有多家公司想要 select 计数。如何扩展之前的查询以显示多家公司的不同计数?
select count(distinct username),
sum(case when company_id = 1 then 1 else 0 end) A,
sum(case when company_id = 9 then 1 else 0 end) B
from `user_activity` Where timestamp BETWEEN '2015-09-00' AND '2015-10-01' AND action = "Login Success"
我做过类似的事情,但是,我没有得到正确的数字。理想情况下,我想将每个计数列为不同的值以便于阅读,就像前面的查询所说明的那样。我不需要 count(distinct username)
列出现在我的结果中,只需要条件。
提前致谢。
如果您不介意两行而不是两列:
SELECT company_id, COUNT(DISTINCT username)
FROM user_activity
WHERE company_id IN (1,9)
AND timestamp >= '2015-09-01'
AND timestamp < '2015-09-01' + INTERVAL 1 MONTH
AND action = "Login Success"
GROUP BY company_id