2015-07-06 130 views
0

我有以下表結構:MSQL條件聚合函數

CREATE TABLE `divisions` (
    `ID` INT NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(100) NOT NULL, 
    PRIMARY KEY (`ID`)); 

    CREATE TABLE `div_postcodes` (
    `div_id` INT NOT NULL, 
    `postcode` INT NOT NULL, 
    `percentage` DECIMAL NULL, 
    PRIMARY KEY (`div_id`, `postcode`)); 

上郵政編碼的表存儲信息,以及選民他們屬於,屬於該選民該郵政編碼區域的百分比。

我需要得到的是每個選區的郵政編碼列表,但我只希望它在列表中的百分比最高,並且hense郵政編碼應該只出現一次。如果可以使用group_concat將郵編連接到一個字符串中,那也很棒。

例如:作爲接着 郵編列出:

div_id, postcode, percentage 
601, 828,  90.10 
602, 828,  9.90 

我只想郵政編碼828到下div_id 601中列出,因爲它包括90%

http://www.sqlfiddle.com/#!9/90997

+0

你可以添加樣本數據嗎?你可以創建一個SQL小提琴,如果你喜歡的話:http://www.sqlfiddle.com/ – zedfoxus

+0

SQL小提琴添加到後 - 我增加了數據601和602,其中有一個共同的郵政編碼828 – user348120

回答

0

以下查詢將給你分部和郵編的單一組合 - 最高百分比的組合。那是你在找什麼?

select div_id, postcode, max(percentage) 
from div_postcodes 
group by div_id, postcode 
+0

國王,我希望我可以在group_concat中獲取郵編,但是您的解決方案將我的想法嵌入到我的解決方案中,我之後 – user348120

+0

我會對您提供幫助,但顯然我不允許:/ – user348120

+0

不用擔心upvote。謝謝。很高興你能找出解決方案。 – zedfoxus

0
select 
    d.div_id, group_concat(d.postcode) 
from 
    (select 
     div_id, postcode, max(percentage) 
    from 
     div_postcodes 
    group by postcode) d 
group by div_id