2017-04-02 49 views
1

我已經寫了一個查詢,顯示的原因,人們每年每取消國家他們的訂單的入選理由量:哪個給出了這樣的結果ATM如何選擇count()的最高值?

SELECT DISTINCT LEFT(k.wijk,2) AS state, 
     YEAR(a.eind_dt) AS year, 
     opzegreden AS reason, 
     count(*) AS amount 
FROM  klant AS k 
JOIN  abon AS a 
ON  k.klant_id = a.lezer 
WHERE opzegreden IS NOT NULL 
GROUP BY LEFT(k.wijk,2), year(a.eind_dt), opzegreden 
ORDER BY state, year, reason; 

Current result

現在唯一我似乎無法做到的事情是顯示每年每州最多選擇的原因。這與我目前的結果是一致的。

有人可以幫我嗎?

+0

你應該拋出,一些樣本數據。如果我使用的分區函數在我的查詢,那麼爲什麼我必須使用GROUP BY,順序按etc.Also「儲值像‘k.wijk作爲國家’是壞主意你應該直接將商店標識存儲在表格中。 – KumarHarsh

回答

1

可以配對top with ties與窗函數row_number,每個國家每年最多數量來獲得行。

select top 1 with ties LEFT(k.wijk, 2) as state, 
    YEAR(a.eind_dt) as year, 
    opzegreden as reason, 
    count(*) as amount 
from klant as k 
join abon as a on k.klant_id = a.lezer 
where opzegreden is not null 
group by LEFT(k.wijk, 2), 
    year(a.eind_dt), 
    opzegreden 
order by row_number() over (
     partition by state, year order by amount desc 
     ); 
+0

哦,哇,這個作品完美無缺。 –

0

你可以試試這個: -

SELECT 
     state, 
     year, 
     reason, 
     max(amount) 
    FROM 
    (
    SELECT DISTINCT LEFT(k.wijk,2) AS state, 
    YEAR(a.eind_dt) AS year, 
    opzegreden AS reason, count(*) AS amount 
    FROM klant AS k 
    JOIN abon AS a 
    ON k.klant_id = a.lezer 
    WHERE opzegreden IS NOT NULL 
    GROUP BY LEFT(k.wijk,2), year(a.eind_dt), opzegreden 
    ORDER BY state, year, reason 
    ) d 
GROUP BY 
    state, 
    year, 
    reason;