Database
 sql >> база данни >  >> RDS >> Database

Как да класирате редове в дял в SQL

Проблем:

В набора от резултати бихте искали да разделите записи и да класирате редове във всеки дял, като добавите още една колона, за да покажете ранговете на редовете в дяла.

Пример:

Нашата база данни има таблица с име magazine с данни в следните колони:id (първичен ключ), name , category и price .

id име категория цена
105 Живот на село начин на живот 1,70
108 Списание за новини новини 3,35
115 Децибел музика 6,50
123 Списание за барабани музика 6,50
145 Залез начин на живот 12.00
155 Свят начин на живот 9,50
158 Клавиатура музика 8,45

Нека групираме списанията според категория и класирайте всяка група в низходящ ред по цена . Покажете позицията в класирането, името, категорията и цената за всяко списание.

Решение:

SELECT  
  category,
  name,
  price,
  RANK() OVER (PARTITION BY category
                    ORDER BY price DESC
                    ) AS price_rank
FROM magazine;

Ето резултата:

категория име цена ценови_ранг
лайфстайл Залез 12.00 1
лайфстайл Свят 9,50 2
лайфстайл Живот на село 1,70 3
музика Клавиатура 8,45 1
музика Децибел 6,50 2
музика Списание за барабани 6,50 2
новини Списание за новини 3,35 1

Дискусия:

За да разделите редове и да ги класирате според позицията им в дяла, използвайте функцията RANK() с клаузата PARTITION BY.

Функцията RANK() на SQL ни позволява да добавим позиция на запис в резултатния набор или във всеки дял. В нашия пример ние класираме редове в рамките на дял.

Клаузата OVER() винаги идва след RANK(). OVER() трябва да съдържа клауза ORDER BY. Ако връщате рангове в рамките на дял, поставете клауза PARTITION BY в клаузата OVER(). PARTITION BY е последвано от израз или име на колона; в нашия пример използваме колоната category (PARTITION BY category ).

Забележка: Ако не използвате дялове, можете да пропуснете PARTITION BY и просто да поставите клаузата ORDER BY в OVER().

След PARTITION BY поставете ORDER BY, последвано от имената на колоните или изразите за сортиране. В нашия пример ние сортираме в низходящ ред по колоната price (ORDER BY price DESC ). Ключовата дума DESC показва низходящ ред на сортиране.

В горния пример, използвайки RANK() с PARTITION BY, резултатите са разделени на отделни групи списания по тяхната категория . Във всяка група редовете бяха сортирани по цена и след това се класира в тази група.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите колона уникална в SQL?

  2. Задаване на физическа готовност за активна защита на данните в архитектура с един възел на RAC – част 1

  3. Как да деактивирате плъгини от базата данни на WordPress

  4. Ролята на DBA в NoSQL

  5. Направете страхотни списъци сами или GitHub като тетрадка