假设我有这张 table
language | offer
chinese | 1
chinese | 1
english | 1
spanish | 2
spanish | 2
italian | 2
french | 3
我想要每个不同报价出现次数最多的语言,就像这样
language | offer
chinese | 1
spanish | 2
french | 3
我如何在 oracle sql 中执行此操作?
最佳答案
这是一种使用公共(public)表表达式
的方法。
在第一个 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
关于sql - Oracle Sql获取另一列的每个不同值出现次数最多的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817716/