带组的条件聚合查询

时间:2016-07-06 05:06:22

标签: mysql sql

我有一个用户从不同公司登录的系统。我尝试运行查询以查看活跃用户数与每家公司的用户总数。

Users表:

userIDcompanyIDlastLogin

期望的输出:

companyIDtotalCompanyUsersnumUsersWhoLoggedInWithinLastMonthFromCompany

查询尝试:

SELECT companyID, COUNT(userID) AS `numUsersWhoLoggedInWithinLastMonth`
FROM Users
WHERE IFNULL(TIMESTAMPDIFF(MONTH, lastLogin, NOW()),- 1) = 1
GROUP BY companyID;

我正在努力弄清楚如何使用两个聚合函数,其中一个是有条件的。

1 个答案:

答案 0 :(得分:1)

你非常接近,你只需要将条件放在你想要执行的条件聚合的聚合函数中:

SELECT
companyID, 
COUNT(userID) AS `totalCompanyUsers`,
SUM(CASE 
  WHEN 
    TIMESTAMPDIFF(MONTH, lastLogin, NOW()) < 1 THEN 1 
  ELSE 0
END
) AS `numUsersWhoLoggedInWithinLastMonth`
FROM Users
GROUP BY companyID;

结果仍按companyID分组,但第二个聚合函数执行1和0的总和,具体取决于用户是否在上个月内登录。