SQL、Select 几个分类值的第 N 个五分位数

SQL, Select Nth quintile for several categorical values

嘿 Whosebug SQL 和集合论大师!

取下面的假人table。对于每种水果类型,我希望在第 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 个分位数的最低值 所有水果 而不是每种水果类型一个。

关于如何调整上述查询以计算每种水果类型而不是所有水果的分位数的任何指导?

我在 Google 的 BigQuery 工作。

谢谢!

我看到您在 Ntile windows 函数中按销售额排序,但问题中提供的虚拟数据中没有销售额列。 假设这是你想要做的,我已经包含了一个虚拟销售列并按 Fruit 划分了 Ntile 函数。

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;

Demo

结果

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