Mysql 当另一列满足条件时获取该列的值

Mysql 当另一列满足条件时获取该列的值,mysql,sql,amazon-athena,presto,Mysql,Sql,Amazon Athena,Presto,然后我想要一列col4,当col3='y'被col1分割时,它给出col2的最小值。原始数据集不正常 column1 column2 column3 aa 1 x aa 2 x aa 3 y aa 4 y

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

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
当column3最初为每个ID都有一个值“y”时,我想得到column2的值。实际的表是复杂而大的。我尝试使用
least(case when…)和over partition by group by
,但它抛出错误,因为这里不需要“over”。如果使用GROUPBY,我会得到一个错误,即许多其他分类列没有分组。它仅适用于应用于以下列的任何函数,但它不会给出所需的结果

least(滞后(第3列)超过(按第1列划分顺序按第2列划分)时的情况)='y'
然后按要求设置第2列(否则为空端)\ t中的列值

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

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
对于早期版本,请使用相关子查询:

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

请参阅。

您想要什么结果?我不明白你真正想要的是什么。required_column_值是我的“required result”,它实际上是基于col3值从col2派生出来的,应该在col1上进行分区。请看:我已经把示例讲得更清楚了
SELECT t1.*,
       (SELECT MIN(t2.column2) FROM tablename t2 WHERE t2.column1 = t1.column1 AND t2.column3 = 'y') column4
FROM tablename t1