Поиск по сайту:

Очень умным людям начинают не доверять, если видят их смущение (Ф. Ницше).

Функция PERCENT_RANK в MySQL

2 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (4 оценок, среднее: 5,00 из 5)
Загрузка...
28 октября 2019
MySQL. Математические функции
Резюме : в этой статье вы узнаете, как использовать функцию PERCENT_RANK() в MySQL для вычисления относительного ранга строки в пределах раздела или набора результатов.

PERCENT_RANK() является оконной функцией, которая вычисляет относительный ранг в строке в пределах раздела или результирующий набор.

Ниже показан синтаксис функции PERCENT_RANK():

PERCENT_RANK()
OVER (
PARTITION BY expr,...
ORDER BY expr [ASC|DESC],...
)

 

Функция PERCENT_RANK() возвращает число, которое находится в интервале от нуля до единицы.

Для указанной строки PERCENT_RANK() вычисляется ранг этой строки минус один, деленный на 1 меньше, чем количество строк в оцененном разделе или наборе результатов запроса:

(rank - 1) / (total_rows - 1)

 

В этой формуле rank – ранг указанной строки, а total_rows – количество оцениваемых строк.

Функция PERCENT_RANK() всегда возвращает ноль для первой строки в перегородке или результирующий набор. Повторяющиеся значения столбца получат одно и то же значение PERCENT_RANK().

Подобно другим оконным функциям, предложение PARTITION BY распределяет строки по разделам, а предложение ORDER BY определяет логический порядок строк в каждом разделе. Функция PERCENT_RANK() вычисляется для каждого упорядоченного разбиения самостоятельно.

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

 

Примеры функции PERCENT_RANK() в MySQL

Давайте создадим новую таблицу с именем productLineSalesна основе orders, таблиц orderDetails и products из базы данных выборки :

CREATE TABLE productLineSales
SELECT
productLine,
YEAR(orderDate) orderYear,
quantityOrdered * priceEach orderValue
FROM
orderDetails
INNER JOIN
orders USING (orderNumber)
INNER JOIN
products USING (productCode)
GROUP BY
productLine ,
YEAR(orderDate);

 

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

 

Использование MySQL PERCENT_RANK()поверх набора результатов запроса

Следующий запрос находит относительный ранг каждой линейки продуктов по значениям заказа:

WITH t AS (
SELECT
productLine,
SUM(orderValue) orderValue
FROM
productLineSales
GROUP BY
productLine
)
SELECT
productLine,
orderValue,
ROUND(
PERCENT_RANK() OVER (
ORDER BY orderValue
)
,2) percentile_rank
FROM
t;

 

В этом примере:

  • Сначала мы использовали общее табличное выражение для суммирования значений заказа по линиям продуктов.
  • Во-вторых, мы использовали PERCENT_RANK() для расчета относительного ранга стоимости заказа каждого продукта. Кроме того, мы использовали функцию ROUND() для округления значений до 2 десятичных для лучшего представления.

 

Использование PERCENT_RANK() в MySQL над разделом

Следующий оператор возвращает процентное ранжирование товарных линий по значениям заказа в каждом году:

SELECT
productLine,
orderYear,
orderValue,
ROUND(
PERCENT_RANK()
OVER (
PARTITION BY orderYear
ORDER BY orderValue
),2) percentile_rank
FROM
productLineSales;

 

В этом примере мы разделили значения заказа продуктовых линеек по году заказа. Затем PERCENT_RANK() применяется к каждому разделу.

В этой статье вы узнали, как использовать функцию PERCENT_RANK() в MySQL для вычисления процентного ранга строки в разделе или наборе результатов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close