从 SQL 服务器的 group by 子句中包含不同字符串值的结果中获取最大值
Get max value from result which contains different string value in group by clause in SQL Server
我的table是这样的,
Field1 | Field2 | Field3
2 | 100 | test1
3 | 100 | test2
我需要从这个结果中得到最大值。所以结果应该如下,
3 100 test2
我当前的查询是,
SELECT MAX(Field1),Field2,Field3 FROM Table1 GRUOP BY Field2,Field3
这returns这两行。但我只需要包含 MAX(Field1)
值的行。
大概,您想要每个不同 field2
具有最大值 field1
的行。由于您想要整行,因此聚合不是解决方案;相反,您想过滤。
这是一种使用相关子查询的方法:
select t.*
from mytable t
where t.field1 = (select max(t1.field1) from mytable t1 where t1.field2 = t.field2)
另一个选项使用 window 函数:
select *
from (
select t.*, rank() over(partition by field2 order by field1 desc) rn
from mytable t
) t
where rn = 1
最后,这是一个更原始的方法,使用 with ties
:
select top (1) with ties *
from mytable
order by rank() over(partition by field2 order by field1 desc)
我的table是这样的,
Field1 | Field2 | Field3
2 | 100 | test1
3 | 100 | test2
我需要从这个结果中得到最大值。所以结果应该如下,
3 100 test2
我当前的查询是,
SELECT MAX(Field1),Field2,Field3 FROM Table1 GRUOP BY Field2,Field3
这returns这两行。但我只需要包含 MAX(Field1)
值的行。
大概,您想要每个不同 field2
具有最大值 field1
的行。由于您想要整行,因此聚合不是解决方案;相反,您想过滤。
这是一种使用相关子查询的方法:
select t.*
from mytable t
where t.field1 = (select max(t1.field1) from mytable t1 where t1.field2 = t.field2)
另一个选项使用 window 函数:
select *
from (
select t.*, rank() over(partition by field2 order by field1 desc) rn
from mytable t
) t
where rn = 1
最后,这是一个更原始的方法,使用 with ties
:
select top (1) with ties *
from mytable
order by rank() over(partition by field2 order by field1 desc)