简体   繁体   English

MySQL SELECT SUM CASE 与 GROUP BY 或 DISTINCT

[英]MySQL SELECT SUM CASE with GROUP BY or DISTINCT

I'm trying to count unique user ids in a log table by month.我正在尝试按月计算日志表中的唯一用户 ID。 So far I came up with the following query:到目前为止,我想出了以下查询:

SELECT 
COUNT(CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;

This query returns the total of all rows of the user_log in januari.此查询返回 januari 中 user_log 的所有行的总和。 However I would like to know how many unique users have logged in in Januari.但是我想知道有多少独立用户登录过 Januari。 So I need something like:所以我需要类似的东西:

SELECT 
COUNT(**DISTINCT user_id** CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;

I also tried GROUP BY, but so far no luck.我也尝试过 GROUP BY,但到目前为止还没有运气。 Does anyone have a suggestion?有人有建议吗?

Consider:考虑:

SELECT COUNT(DISTINCT CASE WHEN log_date >= '2020-01-01' AND log_date < '2020-02-01' THEN userid END) AS januari
FROM user_log;

I changed the filtering logic to use half-open intervals rather than string matching: it is more efficient.我将过滤逻辑更改为使用半开区间而不是字符串匹配:这样效率更高。

Note that, if you just that result for January, it is sufficient to use a WHERE clause:请注意,如果您只是一月份的结果,则使用WHERE子句就足够了:

SELECT COUNT(DISTINCT userid) januari
FROM user_log
WHERE log_date >= '2020-01-01' AND log_date < '2020-02-01'

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

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