对相同 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 的记录数。
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
我有一个 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 的记录数。
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