对相同 table 进行计数和分组的 2 个不同查询

2 different queries on same table with count and group by

我有一个 table entries,其中包含以下列:id、电子邮件、sku、付款、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

这里的目标是得到一组 3 列的结果,在第 2 列中显示每个 sku 在一个日期范围内的记录数,在第 3 列中显示相同 sku 的记录数。

  1. Sku(所有内容都分组)

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

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

并且结果应按 sku 升序排序。

我已经使用 UNION、JOIN 等尝试了很多不同的方法,但到目前为止都没有成功。

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

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