如何获得Oracle中不同记录的最高排名?

thu*_*eek 4 sql oracle count distinct

我有一个包含大量记录的表,其中一些字段重复.我想要最常见的每个重复.

所以,如果我的表有如下数据:

 ID     Field1     Field2  
  1      A          10  
  2      A          12 
  3      B          5  
  4      A          10  
  5      B          5  
  6      A          10  
  7      B          8
  8      B          5
  9      A          10
Run Code Online (Sandbox Code Playgroud)

我可以选择不同的并获得计数:

select distinct Field1, Field2, count(Field1)
from Table
group by Field1, Field2
order by Field1, count(Field1) desc
Run Code Online (Sandbox Code Playgroud)

这会给我

Field1    Field2     Count
A         10         4
A         12         1
B          5         3
B          8         1
Run Code Online (Sandbox Code Playgroud)

但是,我只想要具有最高计数的每个Field1的记录.我一直在使用rank()而不是分区和子查询,但是没有找到使用两个字段表示唯一性并按计数选择最高记录的正确语法.我一直在寻找,我确信这已被问到,但我找不到它.

我想得到以下内容

Field1     Field2       (optional) Count 
 A          10           4
 B           5           3
Run Code Online (Sandbox Code Playgroud)

目标是查看一个只有一点不正确数据的表(在field1和field2之间链接错误),并根据它通常的内容确定它应该是什么.我不知道有多少不良记录,因此将Count除去低于某个阈值会起作用,但似乎有点笨拙.

如果它更好,我可以制作一个临时表,将我的不同值放入,然后从那里选择,但似乎不应该是必要的.

iva*_*tpr 6

我想这就是你要找的东西:

select field1, field2, cnt from 
(select field1, field2, cnt, rank() over (partition by field1 order by cnt desc) rnk
from (select distinct Field1, Field2, count(Field1) cnt
            from Table1
            group by Field1, Field2
            order by Field1, count(Field1) desc) 
)
where rnk = 1;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴:http://sqlfiddle.com/#!4/fe96d/3