【问题标题】:MySQL Multiple Conditions in Grouped DataMySQL 分组数据中的多个条件
【发布时间】:2022-01-23 04:40:50
【问题描述】:

我想查看有多少用户点击了广告活动并随后注册。

我的日志记录表包含 IP、用户 ID 和数据列(其中包含 $_GET 信息,如 utm_source = newsletter)。用户可以单击时事通讯中的链接,然后在我的网站上注册(当他们的 UserID 不为空时会显示)。我正在尝试按 IP 分组,然后查看是否有任何 IP 在 Data 列中有一个 utm 实例和一个非空白用户 ID(但请注意,这两个条件在不同的行上可能是正确的)

目前我有:

SELECT `ip`, GROUP_CONCAT(DISTINCT(`UserID`)) FROM `Logs`
WHERE `Data` LIKE '%utm%'
GROUP BY `ip`

但是这是不正确的,因为 WHERE 语句会过滤整行,而不是分组数据。


让我进一步澄清这一点。

如果表格看起来像

IP              UserID     Data
12.34.56.78     abcde      
12.34.56.78                utm_source = email
87.65.43.21     xxxxx
19.28.11.11     random
19.28.11.11     random
19.28.11.11                utm_source = newsletter

我希望输出看起来像

IP              UserID     Data
12.34.56.78     abcde      utm_source = email
19.28.11.11     random     utm_source = newsletter

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    添加一个HAVING 子句,其处理类似于聚合的WHERE 条件,主要是为了提供在DataUserID 处获得连接的非空值每个ip 值的相同时间以及单独使用GROUP_CONCAT() 函数,例如

    SELECT `ip`, 
           GROUP_CONCAT(DISTINCT 
                            CASE
                            WHEN `Data` LIKE '%utm%'
                            THEN
                                 `Data`
                             END
                          ) AS Datas,
           GROUP_CONCAT(DISTINCT 
                                 `UserID`
                          ) AS UserIDs
      FROM Logs
     GROUP BY `ip`
    HAVING MAX(`UserID`) IS NOT NULL AND MAX(`Data`) IS NOT NULL
    

    Demo

    【讨论】:

    • 遇到错误#1111 - Invalid use of group function
    • 不完全是。您的WHEN Data LIKE '%utm%' AND UserID IS NOT NULL 代码不符合我的需要。有时可能会有一行数据类似于 utm 但 userid 为空。他们可能会在以后注册(并且可能没有 utm)
    • @Bijan 是的,现在可以连同样本数据和所需的结果集。
    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 2020-12-24
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多