programing

가장 자주 나타나는 값을 선택하는 방법은 무엇입니까?

bestprogram 2023. 7. 31. 21:34

가장 자주 나타나는 값을 선택하는 방법은 무엇입니까?

쿼리가 카운트별로 정렬되어 맨 위 행을 차지하는 예를 본 적이 있지만, 이 경우 여러 개의 "가장 빈도가 높은" 값이 있을 수 있으므로 단일 결과 이상의 값을 반환해야 할 수 있습니다.

이 경우 사용자 테이블에서 가장 자주 나타나는 성을 찾고자 합니다. 지금까지 확인한 내용은 다음과 같습니다.

select last_name from users group by last_name having max(count(*));

안타깝게도 이 쿼리에서 최대 함수가 너무 깊게 중첩되어 있다는 오류가 발생합니다.

select
  x.last_name,
  x.name_count
from
  (select
    u.last_name,
    count(*) as name_count,
    rank() over (order by count(*) desc) as rank
  from
    users u
  group by
    u.last_name) x
where
  x.rank = 1

해석 함수 사용rank다음 순서에 따라 번호를 할당합니다.count(*) desc두 이름의 개수가 동일하면 같은 순위가 되고 다음 숫자는 건너뜁니다. 따라서 순위가 1, 1 및 3인 행을 얻을 수 있습니다.dense_rank두 행의 순위가 동일한 경우(따라서 1, 1, 2) 다음 숫자를 건너뛰지 않는 대안이지만, 순위가 1인 행만 원하는 경우에는 큰 차이가 없습니다.

행을 하나만 사용하려면 각 행에 다른 번호를 지정해야 합니다.이 경우, 사용row_number이 작지만 중요한 차이를 제외하고, 이러한 기능은 유사하며 동일한 방식으로 사용될 수 있습니다.

select name
from
   (select name, count(1) 
      from table
      group by name
      order by count(1) desc) a
where rownum = 1

언급URL : https://stackoverflow.com/questions/7705929/how-to-select-the-most-frequently-appearing-values