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
请参阅演示。