Как вычесть две строки, которые имеют одно совпадающее значение в столбце - PullRequest
0 голосов
/ 12 декабря 2011

Я сравниваю продажи за одну и ту же неделю другого года.Как и в первую неделю 2010 и 2011 годов. Итак, с моим запросом я получаю такие результаты.

week|year|sales
1   |2010|5
1   |2011|10
2   |2010|7
2   |2011|13

Мой запрос выглядит так:

SELECT
min(x.id) AS id,
week as week,
year,
COUNT(*) AS amount,
SUM(price_unit) AS price
FROM (
   SELECT
   so.id as id,
   DATE_PART('week',  so.date_order) AS week,
   DATE_PART('year',  so.date_order) AS year,
 sol.price_unit
 FROM 
sale_order AS so
INNER JOIN sale_order_line AS sol ON sol.order_id = so.id
WHERE so.date_order BETWEEN '2010-01-01' AND '2011-12-31' 
) AS x
GROUP BY
week,
year

Что я хочу сделать, это вычестьодни и те же недели разных лет, чтобы получить разницу в продажах.Как week2011-week2010, и результаты должны выглядеть так:

week|year     |difference
 1  |2011-2010|5
 2  |2011-2010|6

Я просто не представляю, как вычесть это:)

1 Ответ

1 голос
/ 12 декабря 2011

Чтобы получить разницу между двумя годами, попробуйте это:

SELECT
week as week,
'2011-2010' as year,
sum(case calcyear when 2011 then 1 else -1 end) AS amount,
sum(case calcyear when 2011 then price_unit else -1*price_unit end) AS price
FROM (
   SELECT
   so.id as id,
   DATE_PART('week',  so.date_order) AS week,
   DATE_PART('year',  so.date_order) AS calcyear,
 sol.price_unit
 FROM 
sale_order AS so
INNER JOIN sale_order_line AS sol ON sol.order_id = so.id
WHERE so.date_order BETWEEN '2010-01-01' AND '2011-12-31' 
) AS x
GROUP BY
week
...