sql >> Database >  >> RDS >> Oracle

hoe selecteer ik de meest voorkomende waarden?

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

Gebruik de analytische functie rank . Het zal een nummering toewijzen op basis van de volgorde van count(*) desc . Als twee namen hetzelfde aantal hebben, krijgen ze dezelfde rangorde en wordt het volgende nummer overgeslagen (u kunt dus rijen krijgen met rang 1, 1 en 3). dense_rank is een alternatief dat het volgende nummer niet overslaat als twee rijen dezelfde rangorde hebben (je krijgt dus 1, 1, 2), maar als je alleen de rijen met rang 1 wilt, is er niet veel verschil .

Als u slechts één rij wilt, wilt u dat elke rij een ander nummer heeft. Gebruik in dat geval row_number . Afgezien van dit kleine maar belangrijke verschil, zijn deze functies vergelijkbaar en kunnen ze op dezelfde manier worden gebruikt.



  1. Stel standaardlimiet in voor pg_trgm

  2. Beste alternatief om een ​​PostgreSQL-schema in te stellen met PHP PDO

  3. Selecteer rijen totdat een totaalbedrag is bereikt in een kolom (mysql)

  4. PostgreSQL - eerste rij weergeven als totaal aantal andere rijen