sql >> Databáze >  >> RDS >> Oracle

jak vybrat nejčastěji se vyskytující hodnoty?

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

Použijte analytickou funkci rank . Přiřadí číslování na základě pořadí count(*) desc . Pokud mají dvě jména stejný počet, dostanou stejnou hodnost a další číslo je přeskočeno (takže můžete získat řádky s hodnostmi 1, 1 a 3). dense_rank je alternativa, která nepřeskočí další číslo, pokud dva řádky mají stejné pořadí (takže byste dostali 1, 1, 2), ale pokud chcete pouze řádky s pořadím 1, není velký rozdíl .

Pokud chcete pouze jeden řádek, budete chtít, aby každý řádek měl jiné číslo. V takovém případě použijte row_number . Kromě tohoto malého, ale důležitého rozdílu jsou tyto funkce podobné a lze je používat stejným způsobem.



  1. Dynamické připojení k databázi Codeigniter

  2. MySQL najde duplikáty na základě jiné hodnoty sloupce

  3. Použití `SELECT` k volání funkce

  4. Jak ručně zaregistrovat nestandardizované funkce SQL v aplikaci Spring Boot?