我有一个用户从不同公司登录的系统。我尝试运行查询以查看活跃用户数与每家公司的用户总数。
Users
表:
userID
,companyID
,lastLogin
期望的输出:
companyID
,totalCompanyUsers
,numUsersWhoLoggedInWithinLastMonthFromCompany
查询尝试:
SELECT companyID, COUNT(userID) AS `numUsersWhoLoggedInWithinLastMonth`
FROM Users
WHERE IFNULL(TIMESTAMPDIFF(MONTH, lastLogin, NOW()),- 1) = 1
GROUP BY companyID;
我正在努力弄清楚如何使用两个聚合函数,其中一个是有条件的。
答案 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的总和,具体取决于用户是否在上个月内登录。