MySQL SELECT 使用 GROUP BY 或 DISTINCT 的 SUM CASE
MySQL SELECT SUM CASE with GROUP BY or DISTINCT
我正在尝试按月计算日志中的唯一用户 ID table。到目前为止,我提出了以下查询:
SELECT
COUNT(CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;
此查询 returns januari 中 user_log 的所有行的总数。但是我想知道有多少 unique 用户在 Januari 中登录。所以我需要类似的东西:
SELECT
COUNT(**DISTINCT user_id** CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;
我也尝试过 GROUP BY,但到目前为止还没有成功。有人有什么建议吗?
考虑:
SELECT COUNT(DISTINCT CASE WHEN log_date >= '2020-01-01' AND log_date < '2020-02-01' THEN userid END) AS januari
FROM user_log;
我将过滤逻辑更改为使用 half-open 间隔而不是字符串匹配:这样效率更高。
请注意,如果您只是一月份的结果,使用 WHERE
子句就足够了:
SELECT COUNT(DISTINCT userid) januari
FROM user_log
WHERE log_date >= '2020-01-01' AND log_date < '2020-02-01'
我正在尝试按月计算日志中的唯一用户 ID table。到目前为止,我提出了以下查询:
SELECT
COUNT(CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;
此查询 returns januari 中 user_log 的所有行的总数。但是我想知道有多少 unique 用户在 Januari 中登录。所以我需要类似的东西:
SELECT
COUNT(**DISTINCT user_id** CASE WHEN log_date LIKE '2020-01%' THEN 1 END) AS januari
FROM user_log;
我也尝试过 GROUP BY,但到目前为止还没有成功。有人有什么建议吗?
考虑:
SELECT COUNT(DISTINCT CASE WHEN log_date >= '2020-01-01' AND log_date < '2020-02-01' THEN userid END) AS januari
FROM user_log;
我将过滤逻辑更改为使用 half-open 间隔而不是字符串匹配:这样效率更高。
请注意,如果您只是一月份的结果,使用 WHERE
子句就足够了:
SELECT COUNT(DISTINCT userid) januari
FROM user_log
WHERE log_date >= '2020-01-01' AND log_date < '2020-02-01'