sql >> Databasteknik >  >> RDS >> Oracle

hur väljer man de värden som visas oftast?

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

Använd den analytiska funktionen rank . Den kommer att tilldela en numrering baserat på ordningen count(*) desc . Om två namn har samma antal får de samma rang, och nästa nummer hoppas över (så att du kan få rader med rang 1, 1 och 3). dense_rank är ett alternativ som inte hoppar över nästa nummer om två rader har samma rang, (så att du skulle få 1, 1, 2), men om du bara vill ha raderna med rang 1 är det inte så stor skillnad .

Om du bara vill ha en rad, vill du att varje rad ska ha olika nummer. Använd i så fall row_number . Förutom denna lilla men viktiga skillnad är dessa funktioner lika och kan användas på samma sätt.



  1. Dynamisk fråga för PIVOT In-klausul

  2. Låser upp tabeller om tråden tappas bort

  3. Använda konfigurationstabeller för att definiera det faktiska arbetsflödet

  4. SQL - hitta det nummerpar som ligger närmast ett angett par