sql >> Databáze >  >> RDS >> Database

Jak přidat pozice řádků v SQL pomocí RANK()

Problém:

Chcete seřadit záznamy přeskočením pozic v pořadí po řádcích, které mají stejné pořadí.

Příklad:

Naše databáze obsahuje tabulku s názvem championship s údaji v následujících sloupcích:id (primární klíč), user_name a score .

id uživatelské_jméno skóre
111 Jan 12
112 Marie 23
115 Lisa 45
120 Alan 23
221 Chris 23

Zobrazme jména všech uživatelů a jejich skóre seřazené v sestupném pořadí a seřazené podle skóre.

Řešení 1:

SELECT RANK() OVER(ORDER BY score DESC) AS rank_place,
  user_name,
  score
FROM championship;

Tento dotaz vrátí následující hodnocení:

rank_place uživatelské_jméno skóre
1 Lisa 45
2 Marie 23
2 Alan 23
2 Chris 23
5 Jan 12

Všimněte si, že číslo pozice je od 1 do 5, seřazené podle skóre v sestupném pořadí.

Diskuse:

Použijte RANK pokud chcete přeskočit pozice v pořadí po řádcích se stejnou pozicí. V našem příkladu měli Mary, Alan a Chris stejné hodnocení 2. Další vhodná pozice je 5 (počítáno ze 2 + 3 řádků se stejnou pozicí).


  1. MariaDB ROUND() vs. TRUNCATE()

  2. Jedinečný identifikátor (guid) jako primární klíč v návrhu databáze

  3. Transformace řádků na sloupce v MySQL

  4. Proč nemůže mít sloupec textu výchozí hodnotu v MySQL?