[英]MYSQL Multiple column COUNT DISTINCT
我跟踪谁正在登录我们的本地服务器,如下面的数据库所示。
我的数据库结构是:
user logon reconnect
mike 2015-07-09
mike 2015-07-09
mike 2015-07-09
mike 2015-07-09
john 2015-07-09
john 2015-07-09
john 2015-07-09
pete 2015-07-09
pete 2015-07-09
pete 2015-07-09
matt 2015-07-09
sara 2015-07-09
我正在尝试建立一个查询,以获取一天中有多少DISTINCT用户登录或重新连接的查询,数据应如下所示:
date totalcount
2015-07-09 4
基本上,它在2015-07-09拥有4位用户。
这是我的查询,显示最近14天的logons
,但不包括reconnects
SELECT DATE(logon) AS `date`, COUNT(DISTINCT `user`) AS totalcount
FROM user_logons
GROUP BY DATE(logon)
ORDER BY DATE(logon) DESC
LIMIT 14
显示:
date totalcount
2015-07-09 399
2015-07-08 513
2015-07-07 524
2015-07-06 456
2015-07-05 213
2015-07-04 300
2015-07-03 484
2015-07-02 525
2015-07-01 539
2015-06-30 536
2015-06-29 481
2015-06-28 289
2015-06-27 423
2015-06-26 509
我想将这两列加起来,合并它们,然后按日期分组。 我在编写查询时遇到问题。 请帮忙。
使用COALESCE()
函数将两个日期“ 合并 ”:
SELECT DATE(COALESCE(logon, reconnect)) AS `date`, COUNT(DISTINCT `user`) AS totalcount
FROM user_logons
GROUP BY DATE(COALESCE(logon, reconnect))
ORDER BY DATE(COALESCE(logon, reconnect)) DESC
LIMIT 14
我的方法是创建两个临时表。 第一个包含user
和所有登录事件的date
列。 第二个包含所有重新连接事件的user
和date
列。 将这两个表UNION
在一起后,您可以按date
分组,然后获取每个日期的不同用户数。
SELECT t.date AS `date`, COUNT(DISTINCT t.user) AS totalcount
FROM
(
SELECT `user`, DATE(logon) AS `date`
FROM user_logons
WHERE DATE(reconnect) ISNULL
UNION ALL
SELECT `user`, DATE(reconnect) AS `date`
FROM user_logons
WHERE DATE(logon) ISNULL
) t
GROUP BY t.date
ORDER BY t.date DESC
让我补充说,如果您具有NULL
以外的其他NULL
,则此方法将更具吸引力,在这种情况下,您不能如此优雅地使用COALESCE()
。
SELECT t.date AS `date`, COUNT(DISTINCT t.user) AS totalcount
FROM
(
SELECT user, COALESCE(logon,reconnect) AS `date`
FROM user_logons
) t
GROUP BY t.date
ORDER BY t.date DESC
我试图结合Tim Biegeleisen的解决方案和PM 77-1的解决方案。
只是想帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.