2017-06-01 51 views
-2

基本上我有幾個列的表格,但我只在4我的表有興趣的是這樣的:SQL分度號由不同的小組由結果

accountID productID profit cost date  country  city quantity 
     2  10  25 15 2017/03/13 Afghanistan Kabul  330 
     18   3  45 42 2017/05/14 UK   London  5300 
     25  14  22 17 2017/05/21 UK   London  300 
     3  11  30 26 2017/04/23 Afghanistan Herat  400 

我想實現的是讓產品總量按城市,按國家和city_quantity/country_quantity的比例:

country  city city_quantity country_quantity city_percentage 
Afghanistan Kabul  800   1400    0.57 
Afghanistan Kandahar  400   1400    0.29 
Afghanistan Herat  200   1400    0.14 
UK  London   6500   10000    0.65 
UK  Manchester  3000   10000    0.3 
UK  Newcastle  500   10000    0.05 

到目前爲止,我的劇本是這樣的:

select country, city, sum(quantity) 
from table 
where date > dateadd(month,-1,getdate()) 
group by country, city 
order by country, city 

Where條件是因爲我只想要上個月的數據,所以認爲它是不相關的。

如何用簡單的腳本實現我想要的功能?

+0

我想你會向我們展示原始表格中的數據。 –

+1

我可以看到數據集和所需結果之間沒有關聯。請參閱:[爲什麼我應該爲我認爲是非常簡單的SQL查詢提供一個MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-對於什麼似乎對我來說是一個非常簡單的SQL查詢) – Strawberry

+0

我顯然沒有隻有我提供的原始表上的行。這也是我的第一個關於Stack Overflow的問題,請耐心等待。我剛剛創建了一些行,以便更好地描述我想要的內容,因爲我必須處理的數據是非常機密的。但無論如何,根據我的「原始表」,我怎樣才能得到每個城市的總量,每個國家的總量以及這兩者之間的比率?根據我的數據說,我應該有3行:英國倫敦5700 5700 1,阿富汗喀布爾330 730 0.45和阿富汗赫拉特400 730 0.55 – whateveros

回答

0

您可以使用一個做到這一點自聯接總結按國家分組的數量,然後使用該值來搞出個像這樣:

CREATE TABLE testTable (country VARCHAR(2), city CHAR(1), quantity DECIMAL(10,2)); 

INSERT INTO testTable (country, city, quantity) 
VALUES 
('Af', 'K', 330), 
('Af', 'H', 400), 
('Af', 'Q', 700), 
('UK', 'L', 1000), 
('UK', 'M', 500); 

SELECT t.country, t.city, t.quantity AS city_quantity, q.qty AS country_quantity, 
     CAST(t.quantity/q.qty AS DECIMAL(10,2)) AS city_percentage 
FROM testTable t 
JOIN 
(
    SELECT z.country, SUM(z.quantity) qty 
    FROM testTable z 
    GROUP BY z.country 
) q ON t.country = q.country 

這會給你想要的結果集:

+---------+------+--------------+-----------------+-----------------+ 
| country | city | city_quantity| country_quantity| city_percentage | 
+---------+------+--------------+-----------------+-----------------+ 
| Af  | K |   330 |   1430 | 0.23   | 
| Af  | H |   400 |   1430 | 0.28   | 
| Af  | Q |   700 |   1430 | 0.49   | 
| UK  | L |   1000 |   1500 | 0.67   | 
| UK  | M |   500 |   1500 | 0.33   | 
+---------+------+--------------+-----------------+-----------------+ 

請記住,您需要在任何生產查詢中檢查零除。

+0

謝謝,這實際上非常有幫助!我通過使用連接和兩個不同的分組獲得了我想要的結果。 – whateveros