這是一種使用common table expression
s的方法。
SQL Fiddle
在第一CTE,你計算的報價和語言分組計數。 在下一個cte中,使用rank
或row_number
將1
指定給語言數最多的提議。 最後,從排名第一的行中進行選擇。
with counts as(
select offer, language, count(*) cnt
from tablename
group by offer, language)
,ranking as
(select rank() over(partition by offer order by cnt desc) rnk
, c.*
from counts c)
select language, offer
from ranking
where rnk = 1
無窗功能替代方法:
with counts as (
select offer, language, count(*) cnt
from tablename
group by offer, language)
,maxcount as (select offer, max(cnt) mxcnt from counts group by offer)
select c.language, m.offer
from counts c
join maxcount m on m.offer = c.offer and m.mxcnt = c.cnt