【发布时间】:2014-09-10 00:06:33
【问题描述】:
我构建了一个记录用户事件的应用程序。每个事件都包含用户的 IP 地址和他们的用户代理(以及其他数据,如时间戳和其他与此处无关的内容)。
我想使用单个查询来获取(在一行中)事件总数、不同 IP 地址的数量和 iPad 用户数量(不同 IP/用户代理组合的数量,其中 ugeragent 包含“iPad ")。
示例表:事件
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+useragent。
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,但我无法弄清楚。
这组数据应该返回 3 个 iPad 用户。
【问题讨论】: