使用
LEFT
将查询联接到表并再次聚合:
SELECT t.city, t.total period1, COALESCE(SUM(p.amount), 0) period2
FROM (
SELECT city, SUM(amount) AS total
FROM purchases
WHERE date BETWEEN '2020-07-01' AND '2020-10-31'
GROUP BY city
ORDER BY total DESC LIMIT 3
) t LEFT JOIN (
SELECT city, amount
FROM purchases
WHERE date BETWEEN '2020-03-01' AND '2020-06-30'
) p ON p.city = t.city
GROUP BY t.city, t.total
ORDER BY t.total DESC;
或者,使用条件聚合:
SELECT city,
SUM(CASE WHEN date BETWEEN '2020-07-01' AND '2020-10-31' THEN amount ELSE 0 END) period1,
SUM(CASE WHEN date BETWEEN '2020-03-01' AND '2020-06-30' THEN amount ELSE 0 END) period2
FROM purchases
GROUP BY city
ORDER BY period1 DESC LIMIT 3;
或:
SELECT city,
SUM(CASE WHEN date >= '2020-07-01' THEN amount ELSE 0 END) period1,
SUM(CASE WHEN date < '2020-07-01' THEN amount ELSE 0 END) period2
FROM purchases
WHERE date BETWEEN '2020-03-01' AND '2020-10-31'
GROUP BY city
ORDER BY period1 DESC LIMIT 3;
请参见
demo
.