MySQL的:2个不同的查询与计数和组相同的表由
问题描述:
我有一个表entries
有以下的列:ID,电子邮件,SKU,付款,created_atMySQL的:2个不同的查询与计数和组相同的表由
我需要写一些查询得到一些分析在条目上。这两个查询我想合并成一个有:
SELECT SKU,计数(电子邮件)AS total_current从各项WHERE支付 IS NOT NULL和created_at> = DATE_SUB(NOW(),间隔1周) GROUP BY SKU ORDER BY SKU ASC
和
SELECT SKU,计数(电子邮件)AS total_previous从各项WHERE支付 IS NOT NULL和created_at < DATE_SUB(NOW(),INTERVAL 1周)和 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
有趣 - 我没有看到这样的我所有的搜索解决方案,但是这是有道理的,它会作为工作到目前为止需要。我会把它标记为现在的答案。感谢您及时的回复! – Prattski
@Prattski继续吧。 – Strawberry