#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». К сожалению, у меня недостаточно репутации, чтобы поддержать ваш ответ, но я приму его и вернусь сюда, чтобы поддержать, когда я это сделаю.