回答

收藏

PostgreSQL MAX和GROUP BY

技术问答 技术问答 223 人阅读 | 0 人回复 | 2023-09-14

我有一张桌子id,year和count。2 j, h5 T7 @. j) ~7 c, m
我想MAX(count)为每个获取id并保留year发生时间如下:4 @2 T7 h( B" z- ^# f8 z
SELECT id,year,MAX(count)FROM tableGROUP BY id;不幸的是,这给了我一个错误:
& B( w; n  a: z( b1 Y错误:“ table.year必须出现列GROUP BY子句中或在聚合函数中使用( }* W( M8 T/ c% [
所以我试了:! {4 H0 x  n( S( ]5 }
SELECT id,year,MAX(count)FROM tableGROUP BY id,year;然后,它不执行任何操作MAX(count),只按原样显示表。我猜是因为按year和分组时id,它将获得该id特定年份的最大值。
  X0 @/ X# l9 B8 v; [5 e+ |那么,如何编写查询呢?我想得到它id麓小号MAX(count)这种情况发生在当年。
  J( b7 H. X8 t4 t% C; W: ?% B                                                                  U  O( d: H! k% c" W9 n3 [$ V& U7 ?
    解决方案:                                                               
0 @7 G( Z* O% c9 ^- w/ C9 L$ S                                                                select *from (  select id,         year,        thing,        max(thing) over (partition by id) as max_thing  from the_table) twhere thing = max_thing或者:
" o& z: Z' t! rselect t1.id,      t1.year,      t1.thingfrom the_table t1where t1.thing = (select max(t2.thing)                   from the_table t2                                                                                                                                                                                                                                                                                        where t2.id = t1.id);或者8 Y" N* O* o- r* a/ r3 n
select t1.id,      t1.year,      t1.thingfrom the_table t1  join (     select id,max(t2.thing) as max_thing    from the_table t2    group by id  ) t on t.id = t1.id and t.max_thing = t1.thing或者(与前者相同,但符号不同)+ j, G6 `9 D) I# w  f4 B
with max_stuff as (  select id,max(t2.thing) as max_thing  from the_table t2  group by id) select t1.id,       t1.year,      t1.thingfrom the_table t1  join max_stuff t2     on t1.id = t2.id    and t1.thing = t2.max_thing
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则