select max(字段1),over(partition by 字段2,字段3) from table ;--根据字段2和字段3分区取出字段1的最大的
相当于
select max(字段1) from table group by 字段2,字段3;
不过上面的sql会列出所有的行数,然后每一行多一个字段,字段值是一样的
这里的max 可以相应的改成min,avg,sum() 等等
但是如果出现
select 字段2,字段3 max(字段6) over (partition by 字段2,字段3 )from table group by 字段2,字段3,字段5;
会报错的,因为max中的字段6没有在group 中。
可以使用子语句嵌套一下 让最顶层的select 不要出现group BY (SELECT * MAX() OVER() (SELECT .. FROM TABLE GROUP BY ..) )
正确写法是
select t.* max(字段6) over (partition by 字段2,字段3 )
from
(select 字段2,字段3,字段5,字段6 from table group by 字段2,字段3,字段5,字段6)t;
这样每个字段2,字段3相同的值后面多一个相同的值
想要的结果应该是
select 字段2,字段3,字段5,maxp from (
select t.* max(字段6) over (partition by 字段2,字段3 ) maxp from (select 字段2,字段3,字段5,字段6 from table group by 字段2,字段3,字段5,字段6)t
)tt
group by 字段2,字段3,字段5,maxp
可以使用子语句嵌套一下