2016-03-04 2 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

ВЫБРАТЬ Доход, Cos ...... из сообщений) AS х из сообщений, когда т | 19:47:44 Ошибка ядра: ошибка (1064) 42000: «У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с« FROM сообщениями AS »m FROM messages 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 
Смежные вопросы