【问题标题】:How to combine two queries with case statement如何将两个查询与case语句结合起来
【发布时间】:2019-12-31 08:54:23
【问题描述】:

如何将两个查询与case语句结合起来

查询1

SELECT   DATE(created_at),COUNT(DISTINCT user_id) AS count1 
FROM     user
WHERE    by_user = '3'  
AND      DATE(created_at) BETWEEN CURRENT_DATE-2 AND CURRENT_DATE
GROUP BY DATE(created_at) 

查询2

SELECT   DATE(created_at),COUNT(DISTINCT user_id) AS count2 
FROM     USER  
WHERE    by_user <> '3'  
AND      DATE(created_at) BETWEEN CURRENT_DATE-2 AND CURRENT_DATE
GROUP BY DATE(created_at) 

预期输出:

+---------------------+--------+--------+
| date(created_at)    | count1 | count2 |
+---------------------+--------+--------+
| 30/12/2019,12:00 AM | 4000   | 5000   |
| 29/12/2019,12:00 AM | 2434   | 5432   |
+---------------------+--------+--------+

【问题讨论】:

    标签: mysql sql date count pivot


    【解决方案1】:

    使用条件聚合:

    select date(created_at), 
      count(distinct case when by_user = '3' then user_id end) as count1, 
      count(distinct case when by_user <> '3' then user_id end) as count2 
    from user  
    where date(created_at) between current_date-2 and current_date
    group by date(created_at) 
    

    条件where by_user = '3'where by_user &lt;&gt; '3' 使用CASE 表达式进行检查,因此它们已从WHERE 子句中删除。

    【讨论】:

      【解决方案2】:

      你可以做条件聚合:

      select 
          date(created_at) day_at,
          count(distinct case when by_user = 3 then user_id end) as count1, 
          count(distinct case when by_user <> 3 then user_id end) as count2 
      from user  
      where 
          created_at >= current_date - interval 2 day 
          and created_at < current_date + interval 1 day
      group by day_at
      order by day_at
      

      注意事项:

      • 如果列by_user 是数字数据类型,则要进行数字比较,而不是字符串比较

      • 我建议在过滤时不要将日期函数应用于created_at,而是使用半开间隔(这是一种索引友好的策略)。我相应地更改了您的 where 子句,还修改了您的日期算术以使用标准的 interval 语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-03
        • 2022-12-06
        • 2015-05-18
        • 2012-12-12
        • 2020-09-09
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        相关资源
        最近更新 更多