假設我有一個這樣的表:分配類別
CampaignId Category Strike
1 A 2
1 B 3
1 Others 5
2 A 4
2 B 2
3 C 1
3 C 4
4 A 1
4 B 1
4 C 1
4 D 1
4 Others 1
然後,我會計算每個Category
的Strike
百分比CampaignId
這樣的:
SELECT CampaignId, Category, Strike, (SUM(Strike::FLOAT) OVER (PARTITION BY CampaignId)/SUM(Strike::FLOAT) OVER (PARTITION BY CampaignId, Category) * 100) AS PercentageOfStrikesByCategoryByCampaignId
FROM myTable
造成中間表如下:
CampaignId Category Strike PercentageOfStrikesByCategoryByCampaignId
1 A 2 20.0
1 B 3 30.0
1 Others 5 50.0
2 A 4 66.6
2 B 2 33.3
3 C 1 20.0
3 C 4 80.0
4 A 1 20.0
4 B 1 20.0
4 C 1 20.0
4 D 1 20.0
4 Others 1 20.0
現在,我想根據上面計算的PercentageOfStrikesByCategoryByCampaignId
分配一個最終標籤,說FinalCategory
。 FinalCategory
的標準要點是:如果每個CampaignId
中的其中一個類別爲'其他'AND
爲PercentageOfStrikesByCategoryByCampaignId >= 30.0
,則該CampaignId
組中的其餘行將標記爲'其他'。否則,我們將Category
直接複製到FinalCategory
。結果表應該如下所示:
CampaignId Category Strike PercentageOfStrikesByCategoryByCampaignId FinalCategory
1 A 2 20.0 Others
1 B 3 30.0 Others
1 Others 5 50.0 Others
2 A 4 66.6 A
2 B 2 33.3 B
3 C 1 20.0 C
3 C 4 80.0 C
4 A 1 20.0 A
4 B 1 20.0 B
4 C 1 20.0 C
4 D 1 20.0 D
4 Others 1 20.0 Others
我該如何使用盡可能簡單的SQL查詢來實現這樣的事情?預先感謝您的幫助!
太謝謝你了!這像一個魅力。由此,我學到了一招:使用'CASE WHEN'計數器的'SUM'作爲標誌。 :) – user1330974