这是一个有效的示例,但没有得到我需要的一切:
SELECT *,
SUM(price) AS total_revenue
FROM payments
GROUP BY DATE(timestamp)
这将获得总收入(加上price
,但我还需要获得vendor = '22' AND credited = 'Vendor'
处的总价格(就像我每天对价格所做的一样)。
这是我尝试过的:
SELECT *,
SUM(price) AS total_revenue,
(SELECT SUM(price) WHERE vendor = '22' AND credited = 'Vendor') AS vendor_revenue
FROM payments
GROUP BY DATE(timestamp)
我在做什么错或者有什么方法可以解决?
答案 0 :(得分:4)
有条件的聚合是实现所需目标的最佳方法:
SELECT
DATE(timestamp) AS ts,
SUM(price) AS total_revenue,
SUM(CASE WHEN vendor = '22' AND credited = 'Vendor' THEN price ELSE 0 END) AS vendor_revenue
FROM payments
GROUP BY DATE(timestamp);
答案 1 :(得分:1)
您的原始查询格式不正确-您将select *
与group by
一起使用。
SELECT DATE(p.timestamp), SUM(price) AS total_revenue,
SUM(CASE WHEN vendor = 22 AND credited = 'Vendor' THEN price ELSE 0 END) as vendor_22_price
FROM payments p
GROUP BY DATE(p.timestamp)