当另一列满足某个条件时,获取该列的值


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

如果您的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

请参阅演示。

相关内容

  • 没有找到相关文章

最新更新