首页 文章

Mysql:同一个表上有2个不同的查询,包含count和group by

提问于
浏览
1

我有一个表 entries ,其中包含以下列:id,email,sku,payment,created_at

我需要编写一些查询来对条目进行一些分析 . 我想要合并为一个的两个查询是:

SELECT sku,count(email)AS total_current FROM entries WHERE payment IS NOT NULL AND created_at> = DATE_SUB(NOW(),INTERVAL 1 WEEK)GROUP BY sku ORDER BY sku ASC

SELECT sku,count(email)AS total_previous FROM entries WHERE payment IS NOT NULL AND created_at <DATE_SUB(NOW(),INTERVAL 1 WEEK)AND created_at> = DATE_SUB(NOW(),INTERVAL 2 WEEK)GROUP BY sku ORDER BY sku ASC

这里的目标是拥有1组结果,其中3列显示第2列中每个sku的记录数,以及第3列中相同sku的记录数 .

  • sku(所有内容都分组)

  • total_current(计算每个单独sku的第一个查询日期范围内的记录数)

  • total_previous(计算每个单独sku的第二个查询日期范围内的记录数)

结果应按sku升序排序 .

我使用UNION和JOIN等尝试过很多不同的东西,但到目前为止还没有运气 . 任何帮助将不胜感激!

1 回答

  • 1

    您可以使用条件聚合来组合两个查询:

    SELECT sku, 
           count(CASE 
                    WHEN created_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK)  THEN email
                 END) AS total_current,
           count(CASE 
                    WHEN  created_at < DATE_SUB(NOW(), INTERVAL 1 WEEK) AND
                         created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK)  THEN email
                 END) AS total_previous
    FROM entries 
    WHERE payment IS NOT NULL AND 
          created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK)
    GROUP BY sku 
    ORDER BY sku ASC
    

相关问题