J'ai une table avec id
, year
et count
.
Je veux obtenir la MAX(count)
pour chaque id
et garder la year
quand cela se produit, alors je fais cette requête:
SELECT id, year, MAX(count)
FROM table
GROUP BY id;
Malheureusement, cela me donne une erreur:
ERREUR: la colonne "table.année" doit apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégation
J'essaye donc:
SELECT id, year, MAX(count)
FROM table
GROUP BY id, year;
Mais alors, il ne fait pas MAX(count)
, il montre simplement le tableau tel quel. Je suppose que lorsque le regroupement par year
et id
, il obtient le maximum pour le id
de cette année spécifique.
Alors, comment puis-je écrire cette requête? Je veux obtenir le id
´s MAX(count)
et l'année où cela se produit.
select *
from (
select id,
year,
thing,
max(thing) over (partition by id) as max_thing
from the_table
) t
where thing = max_thing
ou:
select t1.id,
t1.year,
t1.thing
from the_table t1
where t1.thing = (select max(t2.thing)
from the_table t2
where t2.id = t1.id);
ou
select t1.id,
t1.year,
t1.thing
from 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
ou (identique à la précédente avec une notation différente)
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.thing
from the_table t1
join max_stuff t2
on t1.id = t2.id
and t1.thing = t2.max_thing