2

我有这样的桌子

|Column 1 |Column 2|Column 3|
|        1|       1|       1|
|        2|       1|       2|
|        3|       1|       3|
|        4|       2|       1|
|        5|       1|       4|
|        6|       2|       2|
|        7|       2|       3|
|        8|       2|       4|
|        9|       2|       5|

现在我想要做的是选择Column 1, Column 2, Column 3WHERE Column2 = 1 AND Column 3 is maximum for column 2 ( 4)

4

2 回答 2

3

您可以使用窗口函数rank找到 col3 的最大值

select col1, col2, col3 from
    (select 
        col1, col2, col3,
        rank() over (order by col3 desc nulls last) rnk
    from my_table
    where col2 = 1)
where rnk = 1;

或者这样做,如果不支持,但要小心,你必须处理nullscol3 中是否存在:

select col1, col2, col3
from my_table t
where col2 = 1
and col3 = (select max(col3)
    from my_table
    where col2 = t.col2);
于 2016-12-15T19:34:09.960 回答
0
SELECT Column1,
       Column2,  
       MAX( Column3 ) OVER ( PARTITION BY Column2 ) AS Column3
  FROM Table
 WHERE Column2 = 1;

在上面的解决方案中,我通过使用窗口函数和 WHERE 条件提取组 Column2=1 中的最大值。借助窗口函数,您无需在任何特定列上使用任何 GROUP BY 子句即可获得最大/最小/计数。

于 2016-12-15T19:30:52.217 回答