【问题标题】:Get a value of a column when another column meets a condition当另一列满足条件时获取一列的值
【发布时间】:2021-08-25 07:20:36
【问题描述】:
column1       column2     column3  
    aa            1        x              
    aa            2        x              
    aa            3        y              
    aa            4        y              
    bb            1        x              
    bb            2        y              
    bb            3        y  
    cc            1        x
    cc            2        z
    cc            3        z

然后我想要一个列 col4,当 col3='y' 被 col1 分区时,它给出 col2 的最小值。原始数据集无序

column1       column2 column3         column4
    aa            1        x              3 
    aa            2        x              3
    aa            3        y              3
    aa            4        y              3
    bb            1        x              2
    bb            2        y              2
    bb            3        y              2
    cc            1        x              NULL
    cc            2        z              NULL
    cc            3        z              NULL

我想在 column3 最初为每个 ID 具有值“y”时获取 column2 值。真正的桌子很复杂而且很大。我尝试使用least(case when...) with over partition by group by,但它会抛出错误,因为这里不需要“Over”。如果我使用 group by,我会收到许多其他分类列未分组的错误。它仅适用于应用于如下列的任何函数,但它没有给我所需的结果。

least(case when (lag( column3) over (partition by column1 order by column2))='y' 
then column2 else NULL end ) as required_column_values from t

【问题讨论】:

  • 你想要什么结果?我不明白你真正想要的是什么。
  • required_column_values 是我的“必需结果”,它实际上是根据 col3 值从 col2 派生的,它应该在 col1 上进行分区
  • 我已经把例子讲得更清楚了

标签: mysql sql amazon-athena presto


【解决方案1】:

如果您的 MySql 版本是 8.0+,您可以使用 MIN() 窗口函数:

SELECT *,
       MIN(CASE WHEN column3 = 'y' THEN column2 END) OVER (PARTITION BY column1) column4
FROM tablename

对于以前的版本,使用相关子查询:

SELECT t1.*,
       (SELECT MIN(t2.column2) FROM tablename t2 WHERE t2.column1 = t1.column1 AND t2.column3 = 'y') column4
FROM tablename t1

请参阅demo

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多