2016-09-03 2 views
0

Ich habe folgende DatenSQLite Vorherige Woche Spalte zu Diese Woche Hinzufügen

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

Was Ich mag würde, ist, etwas zu tun wie folgt aus:

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

Wenn ich nur tun, Land, Menge, Preis, Diese Woche I

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

jedoch verwenden würde, ich bin bei Verlust auf, wie in der vergangenen Woche gegeben hinzufügen, dass die in dem st Attem beschränkt die Daten auf nur eine Woche?

Danke!

Antwort

0

Verwenden Sie bedingte Aggregation. Das heißt, die Bedingung aus den where zu den sum() Aggregationsfunktionen bewegen:

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

Im allgemeinen Fall ein correlated subquery Schleife aufbrauchen Daten der vergangenen Woche:

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; 
Verwandte Themen