MySQL计算具有不同IP地址的用户

时间:2014-07-18 18:59:27

标签: mysql sql select distinct

我构建了一个记录用户事件的应用程序。每个事件都包含用户的IP地址及其使用者(以及其他数据,如时间戳和其他与此无关的内容)。

我想使用单个查询来获取(在一行中)事件总数,不同IP地址的数量以及iPad用户的数量(ugeragent包含的不同IP /用户组合的数量&# 34; ipad公司"。)

样本表:EVENTS

id    ip         useragent
=================================
1    "x1"    "blabla iPad blabla"
2    "x2"    "blabla"
3    "x3"    "blabla iPad blabla"
4    "x3"    "blabla iPad blabla"
5    "x3"    "blabla iPad blabla"

预期结果

event_count    ip_count    ipad_users
=======================================
    5             3            2

我的尝试

以下查询返回 4 iPad用户,因为它不会检查IP +使用者。

SELECT
    COUNT(*) as event_count,
    COUNT(DISTINCT ip) as ip_count,
    COUNT(IF( useragent LIKE '%iPad%', 1, NULL )) as ipad_users
FROM events

这只会返回 1 iPad用户,因为我做错了。

SELECT
    COUNT(*) as event_count,
    COUNT(DISTINCT ip) as ip_count,
    COUNT(DISTINCT ip AND IF( useragent LIKE '%iPad%', 1, NULL )) as ipad_users
FROM events

我该怎么做?我在SO上找到的最近的相关问题是this one,但我无法弄明白。

SQL Fiddle

这组数据应该会让3位iPad用户回归。

1 个答案:

答案 0 :(得分:3)

我想你只想要一个条件count(distinct)

SELECT
    COUNT(*) as event_count,
    COUNT(DISTINCT ip) as ip_count,
    COUNT(DISTINCT (case when useragent LIKE '%iPad%' then ip end)) as ipad_users
FROM events;

也就是说,当用户代理是iPad时,计算ip的不同数量。