2016-01-08 21 views
1

如果我有下面的表百分比總計:用於列組使用MySQL

+---------+-------------+ 
| Country | campaign_id | 
+---------+-------------+ 
| US  |   1 | 
| FR  |   1 | 
| FR  |   1 | 
| UK  |   1 | 
| NL  |   2 | 
| DE  |   2 | 
+---------+-------------+ 

如何退還比例爲每一個國家是這樣的:

+---------+------------+ 
| Country | Percentage | 
+---------+------------+ 
| US  | 25   | 
| FR  | 50   | 
| UK  | 25   | 
+---------+------------+ 

這就是我到目前爲止:

SELECT country FROM campaigns WHERE campaign_id = 1 

只要注意,如果更容易返回0.25即可。

+0

你想在哪個領域計算百分比? –

+0

在拉動記錄後,使用簡單的計算可​​以做到這一點嗎? SELECT * FROM Table WHERE campaign_id = 1.然後計算ang從此處生成百分比的行數。您不希望進一步複雜化SQL查詢,這很容易在代碼中執行。 –

+0

每個國家的百分比....所以說55.6%美國,12.4%PL等 –

回答

1

編寫子查詢以獲取廣告系列中的總行數,然後將其分爲按國家/地區分組的行數。

SELECT a.country, ROUND(100 * COUNT(*)/b.total, 2) AS percentage 
FROM yourTable AS a 
CROSS JOIN (
    SELECT COUNT(*) AS total 
    FROM yourTable 
    WHERE campaign_id = 1) AS b 
WHERE a.campaign_id = 1 
GROUP BY a.country 

DEMO

+0

完美的作品 - 感謝這讓我瘋狂! –

1

對你給予什麼(看起來像計數的國家的數量與特定ID):

SELECT country, ((COUNT(campaign_id)*100)/(SELECT SUM(campaign_id) FROM campaigns WHERE campaign_id = 1)) AS percent 
FROM campaigns 
WHERE campaign_id = 1 
GROUP BY country 
+0

謝謝,有點太晚不吉利:) –

+0

嗯,這沒有子查詢。也許這更有效率?如果是這樣,我會接受這個。 –

+0

啊等,我看到子查詢納米:) –

1

這是我對你的情況的解決方案:

SELECT Country, 
     (campaign_id/((select SUM(campaign_id) FROM table1 where campaign_id = 1))*100) as percentage 
FROM tablename 
WHERE campaign_id = 1 
GROUP BY Country, campaign_id 
+0

謝謝,有點不幸運太遲:) –

+0

沒問題:P我創建你的表和你的情況在我的localDB:P – rdn87

+0

你爲什麼總結campaign_id而不是隻計算行? ID通常不是算術運算,它們只是標識符。 – Barmar