Oracle SQL:按州查找最常见的姓氏

时间:2018-06-05 15:25:42

标签: sql oracle

我一直试图回答这个看似简单的问题,但我被困了

我有两个包含7M个人信息的表,一个包含姓名[包括姓氏]信息,另一个包含[包括州]信息。它们加在id

我想找到每个州最常见的姓氏。所以我想按如下方式返回一个列表,按字母顺序排列,并按最常用名称的计数

:State:     :Name:      :Count:
State A     Planck       5789                                        
State B     Heisenberg   8412 
State C     Dirac        2178

似乎它应该很容易,但我已经陷入困境,提前谢谢!

3 个答案:

答案 0 :(得分:3)

我会选择row_number()group by

select state, name, cnt
from (select state, name, count(*) as cnt,
             rank() over (partition by state order by count(*) desc) as seqnum
      from t
      group by state, name
     ) t
where seqnum = 1;

这使用rank(),因此如果第一个地方有联系,它将返回多行。如果要在关系中返回任意一行,请使用row_number()

答案 1 :(得分:1)

您需要GROUP BY

select t.state, t.name, t.count
from (select State, Name, count(*) as count
             row_number() over (order by count(*) desc) as seq
      from table 
      group by State, Name
     ) t
where seq = 1;

答案 2 :(得分:0)

我会确保在对其进行分组之前将UPPER()或可能INITCAP()应用于姓氏,除非您想要大小写的变体(例如McDonald vs. { {1}})要区分:

Mcdonald

希望这有帮助。

相关问题