【问题标题】:SQL, Select Nth quintile for several categorical valuesSQL,为几个分类值选择第 N 个五分位数
【发布时间】:2022-01-12 11:58:30
【问题描述】:

嘿 StackOverflow SQL 和集合论大师!

拿下面的假表。对于每种水果类型,我都希望在第四个五分位数中找到最低值。

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

当然,这种方法为我提供了第四分位数中的最低值所有水果,而不是每种水果类型一个。

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

我在 Google 的 BigQuery 工作。

谢谢!

【问题讨论】:

    标签: sql google-bigquery set logic set-theory


    【解决方案1】:

    我可以看到您在 Ntile 窗口功能中按销售额排序,但问题中提供的虚拟数据中没有销售额列。 假设这是您想要做的,我已经包含了一个虚拟销售列,并按 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 |
    

    【讨论】:

    • 谢谢Okechukwu Ossai,这就像一个魅力!我修复了在 ORDER BY 之后潜入的“销售” - 这是来自真实案例而不是虚拟问题。它应该是“大小”。不幸的是,我没有足够的声誉来支持你的答案,但我会接受它并在我这样做时回到这里支持。
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多