2016-03-04 93 views
0

我可以计算每行列利润?如何计算两列之间的差异与结果

SELECT 
SUM(CASE WHEN m.billable = 0 THEN r.rate ELSE 0 END) AS Revenue, -- 33 + 34 + 456 + 52...etc = 5500 
    SUM(CASE WHEN m.billable = 1 AND m.optimized = 0 THEN r.rate ELSE 0 END) AS Costs,-- 33 + 4...etc = 339 
    5500 - 339 AS Profit -- I need to get this difference 
    FROM messages AS m 
JOIN rates AS r ON (r.id = m.rate_id ) 
    GROUP BY 
      m.client_account_id, 
      m.mcc, 
      m.mnc 

enter image description here

enter image description here

我想

| Revenue | Costs | Profit 
 
    5500  500  5000

回答

2

将您的查询移入子查询,然后减去结果。

SELECT Revenue, Costs, Revenue - Costs AS Profit 
FROM (
    SELECT 
     SUM(CASE WHEN m.billable = 0 THEN r.rate ELSE 0 END) AS Revenue, 
     SUM(CASE WHEN m.billable = 1 AND m.optimized = 0 THEN r.rate ELSE 0 END) AS Costs 
    FROM YourTable) AS x 

加入你的两个表,并表示考虑分组的结果,那就是:

SELECT client_account_id, mmc, mnc, Revenue, Costs, Revenue - Costs AS Profit 
FROM (
    SELECT 
     m.client_account_id, m.mmc, m.mnc 
     SUM(CASE WHEN m.billable = 0 THEN r.rate ELSE 0 END) AS Revenue, 
     SUM(CASE WHEN m.billable = 1 AND m.optimized = 0 THEN r.rate ELSE 0 END) AS Costs 
    FROM messages AS m 
    JOIN rates AS r ON r.id = m.rate_id 
    GROUP BY m.client_account_id, m.mmc, m.mnc 
) AS x 
+0

SELECT收入,COS ......从消息)为X FROM为M的邮件| 19:47:44内核错误:错误(1064)42000:“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以便在'FROM消息附近使用AS m FROM消息AS m – AxOn

+0

在同一查询中不能有两个FROM字段 – Barmar

+0

我更新了更全面的查询,但我需要使用消息表/我们可以用它做什么? – AxOn

2

简单地把它放在一个子查询:

SELECT Revenue - Costs as Profit 
FROM (
SELECT 
SUM(CASE WHEN m.billable = 0 THEN r.rate ELSE 0 END) AS Revenue, 
SUM(CASE WHEN m.billable = 1 AND m.optimized = 0 THEN r.rate ELSE 0 END) AS Costs 
) as temp 
相关问题