【问题标题】:SQL Multiple Selects and Group BysSQL 多选和分组依据
【发布时间】:2016-08-03 07:16:12
【问题描述】:

这是我的数据:

我想查找满足以下条件的每个日期的唯一 SessionId 数量: 当一个sessionid中的“/topic”个数=1时,同一个sessionid中的“/detail”个数也等于1。所以对于我来说,sessionid=1(412)是唯一满足要求的sessionid。

这是我使用的代码:(表名是we)

SELECT count( Distinct sessionid) 
from
    ( Select sessionid, count(search like "/topic%") as TN and Count(search like "/detail%") as DN from we GROUP BY date order by date) as my_table 
WHERE TN ==1 and DN=1

抱歉代码混乱,但它应该打印出日期 412 和日期 413 的 [1,0]。但它不起作用。有什么建议吗?非常感谢!

【问题讨论】:

    标签: mysql sql select conditional


    【解决方案1】:
    SELECT DATE, 
           count(Distinct sessionid) 
    FROM (Select sessionid, 
                 DATE,
                 SUM(CASE WHEN search like '/topic%' THEN 1 ELSE 0 END) as TN, 
                 SUM(CASE WHEN search like '/detail%' THEN 1 ELSE 0 END) as DN 
        from we 
        GROUP BY sessionid, DATE
        ) as my_table 
    WHERE TN = 1 AND DN = 1
    GROUP BY DATE
    

    【讨论】:

      【解决方案2】:

      您在子查询的正确轨道上。您的语法有点偏离(例如,使用sum() 而不是count())并且group by 键不正确。但是,您似乎在寻找:

      select date, count(Distinct sessionid)
      from (select date, sessionid,
                   sum(search like "/topic%") as TN, sum(search like "/detail%") as DN
            from we
            group by date, sessionid
           ) t
      whereTN = 1 and DN = 1
      group by date;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多