2016-09-03 3 views
0

я следующие данныеSQLite Добавление предыдущей колонке Неделя до текущей недели

Week Country  Quantity  Price 
    1  Sweden   2   $10 
    1  Germany   3   $20 
    2  Sweden   10   $20 

То, что я хотел бы сделать что-то вроде этого:

Country Quantity Price Current Week Revenue Past Week Revenue 
Sweden 30  100   300  3000 2000 

Если я просто делал Страна, количество, Цена, Текущая неделя Я бы использовать

SELECT Country, sum(uantity), sum(price), sum(price*quantity) as   
    revenue 
    from dataset where Week = 1 Group by Country. 

Однако я в догадках о том, как добавить на прошлой неделе, учитывая, что где С.Т. atement ограничивает данные только одной неделей?

Спасибо!

ответ

0

Использовать условную агрегацию. То есть, переместить условие из where к функциям sum() агрегации:

SELECT Country, 
     SUM(CASE WHEN Week = 1 THEN quantity END) as quantity_1, 
     SUM(CASE WHEN Week = 1 THEN price END) as price_1, 
     SUM(CASE WHEN Week = 1 THEN price*quantity END) as revenue_1, 
     SUM(CASE WHEN Week = 2 THEN quantity END) as quantity_2, 
     SUM(CASE WHEN Week = 2 THEN price END) as price_2, 
     SUM(CASE WHEN Week = 2 THEN price*quantity END) as revenue_2 
FROM dataset d 
WHERE Week IN (1, 2) 
GROUP BY Country; 
0

В общем случае рекомендуется использовать correlated subquery в цикле вверх данные предыдущей недели:

SELECT Country, 
     SUM(Quantity * Price) AS Revenue, 
     (SELECT SUM(Quantity * Price) 
     FROM dataset AS PrevWeek 
     WHERE PrevWeek.Week = dataset.Week - 1 
      AND PrevWeek.Country = dataset.Country 
     ) AS "Past Week Revenue" 
FROM dataset 
GROUP BY Country; 
Смежные вопросы