繁体   English   中英

MYSQL多列COUNT DISTINCT

[英]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列。 第二个包含所有重新连接事件的userdate列。 将这两个表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.

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