Комплексное аналитическое ранжирование с несколькими критериями

Комплексное аналитическое ранжирование с несколькими критериями в SQL позволяет упорядочить данные по нескольким столбцам или критериям. Это может быть полезно в различных ситуациях, таких как создание отчетов, анализ производительности или создание рейтингов.

Для выполнения комплексного ранжирования вы можете использовать функцию RANK() или другие оконные функции вместе с несколькими критериями в части ORDER BY в окне. Вот несколько примеров, как это можно сделать:

Пример 1: Ранжирование сотрудников по зарплате и стажу

Рассмотрим таблицу employees с полями employee_id, department, salary, и hire_date. Мы хотим ранжировать сотрудников в каждом отделе сначала по зарплате, а затем по стажу работы (новее сотрудники получают более высокий ранг).

Запрос:

SELECT employee_id, department, salary, hire_date,
       RANK() OVER (
           PARTITION BY department
           ORDER BY salary DESC, hire_date ASC
       ) AS rank
FROM employees;
  • PARTITION BY department: Делит данные на группы по отделам.

  • ORDER BY salary DESC, hire_date ASC: Сначала упорядочивает сотрудников по зарплате в порядке убывания, затем по дате найма в порядке возрастания.

Результат: В каждом отделе сотрудники будут ранжированы сначала по зарплате, а затем, если зарплата одинаковая, по стажу.

Пример 2: Ранжирование студентов по среднему баллу и количеству курсов

Рассмотрим таблицу students с полями student_id, average_grade, и courses_count. Мы хотим ранжировать студентов по среднему баллу, а затем по количеству курсов, если средний балл одинаковый.

Запрос:

SELECT student_id, average_grade, courses_count,
       RANK() OVER (
           ORDER BY average_grade DESC, courses_count DESC
       ) AS rank
FROM students;
  • ORDER BY average_grade DESC, courses_count DESC: Сначала упорядочивает студентов по среднему баллу в порядке убывания, затем по количеству курсов в порядке убывания.

Результат: Студенты будут ранжированы сначала по среднему баллу, а затем, если баллы одинаковы, по количеству курсов.

Пример 3: Ранжирование продаж по региону и времени

Рассмотрим таблицу sales с полями region, sale_date, и amount. Мы хотим ранжировать продажи по региону, а внутри региона — по сумме продаж за каждый день.

Запрос:

SELECT region, sale_date, amount,
       RANK() OVER (
           PARTITION BY region
           ORDER BY sale_date ASC, amount DESC
       ) AS rank
FROM sales;
  • PARTITION BY region: Делит данные на группы по регионам.

  • ORDER BY sale_date ASC, amount DESC: Сначала упорядочивает продажи по дате в порядке возрастания, затем по сумме продаж в порядке убывания.

Результат: Продажи будут ранжированы по регионам, затем по дате, и в рамках одной даты — по сумме продаж.

Пример 4: Ранжирование продуктов по рейтингу и продажам

Рассмотрим таблицу products с полями product_id, rating, и sales. Мы хотим ранжировать продукты по рейтингу, а затем по продажам, если рейтинг одинаковый.

Запрос:

SELECT product_id, rating, sales,
       RANK() OVER (
           ORDER BY rating DESC, sales DESC
       ) AS rank
FROM products;
  • ORDER BY rating DESC, sales DESC: Сначала упорядочивает продукты по рейтингу в порядке убывания, затем по продажам в порядке убывания.

Результат: Продукты будут ранжированы сначала по рейтингу, а затем, если рейтинг одинаковый, по продажам.

Заключение

Комплексное аналитическое ранжирование с несколькими критериями позволяет выполнять более детализированный анализ данных. Использование оконных функций с несколькими критериями в ORDER BY позволяет учитывать несколько факторов при вычислении рангов, что помогает создавать более точные и информативные отчеты и анализы.

Last updated