Problém:
Chcete porovnat hodnocení vytvořené RANK a DENSE_RANK a přidejte je jako nové sloupce do tabulky.
Příklad:
Naše databáze obsahuje tabulku s názvem sales_assistant s údaji v následujících sloupcích:id (primární klíč), first_name , last_name , month a sold products .
| id | křestní_jméno | last_name | měsíc | prodané produkty |
|---|---|---|---|---|
| 1 | Lisa | Černá | 5 | 2300 |
| 2 | Marie | Jacobs | 5 | 2400 |
| 3 | Lisa | Černá | 6 | 2700 |
| 4 | Marie | Jacobs | 6 | 2700 |
| 5 | Alex | Smith | 6 | 2900 |
| 6 | Marie | Jacobs | 7 | 1200 |
| 7 | Lisa | Černá | 7 | 1200 |
| 8 | Alex | Smith | 7 | 1000 |
Zobrazme jméno a příjmení každého prodejního asistenta a počet prodaných produktů. Chceme je také seřadit podle počtu prodaných produktů v sestupném pořadí.
Řešení 1:
VYBERTE POŘADÍ() NAD (ORDER BY prodaných produktů DESC) AS r, DENSE_RANK() NAD(ORDER BY prodaných produktů DESC) AS dr, jméno, příjmení, měsíc, prodané produktyFROM sales_assistant;
Tento dotaz vrací dvě hodnocení:jedno vytvořené RANK a další podle DENSE_RANK . Jaký je rozdíl?
Jednoduše řečeno, RANK přeskočí počet pozic za záznamy se stejným pořadovým číslem. Hodnocení RANK_DENSE vrátí čísla pozic od 1 do 6, protože nepřeskočí záznamy se stejným pořadovým číslem:
| r | dr | křestní_jméno | last_name | měsíc | prodané produkty |
|---|---|---|---|---|---|
| 1 | 1 | Alex | Smith | 6 | 2900 |
| 2 | 2 | Lisa | Černá | 6 | 2700 |
| 2 | 2 | Marie | Jacobs | 6 | 2700 |
| 4 | 3 | Marie | Jacobs | 5 | 2400 |
| 5 | 4 | Lisa | Černá | 5 | 2300 |
| 6 | 5 | Marie | Jacobs | 7 | 1200 |
| 6 | 5 | Lisa | Černá | 7 | 1200 |
| 8 | 6 | Alex | Smith | 7 | 1000 |
Diskuse:
Pokud chcete seřadit řádky v sadě výsledků, SQL nabízí RANK() a DENSE_RANK funkcí. Tyto funkce se používají v SELECT s dalšími sloupci. Po RANK nebo DENSE_RANK , nazýváme OVER() funkce, která přebírá ORDER BY klauzule s názvem sloupce k řazení před přiřazením hodnocení.
Na rozdíl od DENSE_RANK , RANK přeskakuje pozice po stejném umístění. Počet vynechaných pozic závisí na tom, kolik řádků mělo stejné pořadí. Například Mary a Lisa prodaly stejný počet produktů a obě jsou na 2. místě. S RANK , další pozice je #4; s DENSE_RANK , další pozice je #3.
Oba RANK a RANK_DENSE práce na oddílech dat:
Řešení 1:
VYBERTE POŘADÍ() NAD (ODDĚLENÍ PODLE měsíce ORDER BY PRODANÉ PRODUKTY DESC) AS r, DENSE_RANK() NAD(ODDĚLENÍ PODLE měsíce ORDER BY PRODANÉ produkty DESC) AS dr, jméno, příjmení, měsíc, prodané produktyFROM sales_assistant;Záznamy můžete rozdělit do skupin podle daného sloupce (v našem příkladu
month). V této situaci jsou záznamy zařazeny jako součást oddílu:
| r | dr | křestní_jméno | last_name | měsíc | prodané produkty |
|---|---|---|---|---|---|
| 1 | 1 | Marie | Jacobs | 5 | 2400 |
| 2 | 2 | Lisa | Černá | 5 | 2300 |
| 1 | 1 | Alex | Smith | 6 | 2900 |
| 2 | 2 | Lisa | Černá | 6 | 2700 |
| 2 | 2 | Marie | Jacobs | 6 | 2700 |
| 1 | 1 | Marie | Jacobs | 7 | 1200 |
| 1 | 1 | Lisa | Černá | 7 | 1200 |
| 3 | 2 | Alex | Smith | 7 | 1000 |