分组依据内的子查询?

时间:2020-03-17 01:17:44

标签: mysql sql

这是一个有效的示例,但没有得到我需要的一切:

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)

我在做什么错或者有什么方法可以解决?

2 个答案:

答案 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)
相关问题