在多个条件下对单个列计算 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