SQL, выберите N-й квинтиль для нескольких категориальных значений

#sql #google-bigquery #set #logic #set-theory

#sql #google-bigquery #установить #Логические #теория множеств

Вопрос:

Привет, StackOverflow SQL и гуру теории множеств!

Возьмите фиктивную таблицу ниже. Для каждого типа фруктов я ищу наименьшее значение в 4-м квинтиле.

 Fruit |Size|Fruit_ID|
Apple |10  |1       |
Apple |12  |2       |
Apple |11  |3       |
Pear  |13  |4       |
Pear  |12  |5       |
Pear  |11  |6       |
Pear  |10  |7       |
Apple |15  |8       |
 

Мой текущий подход

 WITH quantiles AS (
SELECT
 NTILE(4) OVER(ORDER BY Size) as quantile,
 Fruit, 
 Size
FROM
 DUMMY_TABLE
),

SELECT
 MIN(Size),
 Fruit
FROM
 quantiles
WHERE
 quantile = 4
GROUP BY
 Fruit
 

Этот подход, конечно, дает мне наименьшее значение в 4-м квантиле для всех фруктов вместо одного для каждого типа фруктов.

Любые рекомендации о том, как я могу адаптировать приведенный выше запрос для вычисления квантилей для каждого типа фруктов, а не для всех фруктов?

Я работаю в BigQuery от Google.

Большое спасибо!

Ответ №1:

Я вижу, что вы делаете заказ по продажам в функции Windows Ntile, но в фиктивных данных, приведенных в вопросе, нет столбца sales. Предполагая, что это то, что вы хотите сделать, я включил фиктивный столбец sales и разделил функцию Ntile на Fruit .

 WITH quantiles AS (
SELECT
 NTILE(4) OVER(PARTITION BY Fruit ORDER BY sales) AS quantile,
 Fruit, 
 Size
FROM DUMMY_TABLE
)
SELECT
 MIN(Size) AS Lowest_Value,
 Fruit
FROM quantiles
WHERE quantile = 4
GROUP BY Fruit;
 

Смотрите демонстрацию

Результат

 Lowest_Value |Fruit|
    10       |Apple|
    10       |Pear |
 

Комментарии:

1. Спасибо Okechukwu Ossai, это сработало как шарм! И я исправил «продажи», которые появлялись после ORDER BY — это было из реального случая, а не из фиктивной проблемы. Вместо этого должно было быть «Size». К сожалению, у меня недостаточно репутации, чтобы поддержать ваш ответ, но я приму его и вернусь сюда, чтобы поддержать, когда я это сделаю.