我有一个日志表,列出了系统的各种操作,包括用户登录。我想了解每天登录的唯一身份用户数。
我在这里试过了:
SELECT date, count(username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date
ORDER BY date
然而,给了我登录的人数,并计算每个用户的所有多次登录。我认为这是因为我没有按用户名分组。但是,如果我在这里这样做:
SELECT date, count(username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date, username
ORDER BY date
我得到一个表格,每个日期而不是一个条目,并计算每个用户在当天登录的频率。
每个用户每天登录时如何计算+1,无论他当天登录的频率如何?
答案 0 :(得分:4)
在应用于您的第一个查询时,使用COUNT(DISTINCT username)
应该可以解决重复问题。您只对GROUP BY date
提出错误,但只需对username
值进行重复数据删除。
SELECT
date,
count(DISTINCT username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date
ORDER BY date
当您在第二次尝试中将username
添加到GROUP BY
时,每COUNT()
个符合date
,username
在语义上与你想要的不同。对于添加到GROUP BY
的每个列,您的聚合将最终生成更多行(应用于更宽的数据集)或在某些情况下生成相同的行(如果值都是不同的开始)。