我有一个表entries
,其中包含以下列:id,email,sku,payment,created_at
我需要编写一些查询来对条目进行一些分析。我想要合并为一个的两个问题是:
SELECT sku,count(email)AS total_current FROM条目WHERE付款 IS NOT NULL和created_at> = DATE_SUB(NOW(),INTERVAL 1 WEEK)GROUP 作者:sku ORDER BY sku ASC
和
SELECT sku,count(email)AS total_previous FROM条目WHERE付款 IS NOT NULL和created_at< DATE_SUB(NOW(),INTERVAL 1 WEEK)和 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等尝试过很多不同的东西,但到目前为止没有运气。
答案 0 :(得分: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