我有一个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 列,在第二列中显示一个日期范围内每个 sku 的记录数,在第三列中显示相同 sku 的记录数。
Sku(所有内容都分组的地方)
total_current(计算每个单独 sku 的第一个查询日期范围内的记录数)
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句