J'ai le tableau suivant
random_number | band | member_name ----------------------------------------- 2800 | Metallica | Roberto 150 | SkidRow | Dave 500 | Motorhead | Lemmy
Comment pourrais-je obtenir le plus grand numéro_aléatoire
de chaque bande et renvoyer quelque chose comme ceci:
CREATE table test ( random_number INT, band VARCHAR(255), member_name VARCHAR(255) ); INSERT INTO test VALUES(2300,'Metallica', 'Kirk'); INSERT INTO test VALUES(2000,'Metallica', 'Lars'); INSERT INTO test VALUES(2500,'Metallica', 'James'); INSERT INTO test VALUES(2800,'Metallica', 'Roberto'); INSERT INTO test VALUES(100,'SkidRow', 'Sebastian'); INSERT INTO test VALUES(140,'SkidRow', 'Rachel'); INSERT INTO test VALUES(110,'SkidRow', 'Scott'); INSERT INTO test VALUES(150,'SkidRow', 'Dave'); INSERT INTO test VALUES(100,'SkidRow', 'Rob'); INSERT INTO test VALUES(500,'Motorhead', 'Lemmy'); INSERT INTO test VALUES(100,'Motorhead', 'Mikkey'); INSERT INTO test VALUES(200,'Motorhead', 'Phil');
3 Réponses :
Utilisez MAX()
no max band 1 2800 Metallica 2 500 Motorhead 3 150 SkidRow
Voir: https : //rextester.com/BEZD44968
Le résultat serait:
SELECT max(random_number), band FROM test GROUP BY band
Merci pour votre réponse. Je voudrais voir le member_name
dans le résultat.
Ah, alors utilisez distinct. Voir la réponse de @ Gordon.
Utilisez distinct sur
:
select distinct on (band) t.* from test t order by band, random_number desc;
Voici un violon db .
distinct sur
est une extension Postgres très pratique. Pour les performances sur de grands ensembles de données, vous voulez un index sur (band, random_number desc)
.
Trouvez le random_number
maximum en groupant et joignez-le à la table:
select t.* from test t inner join ( select band, max(random_number) maxnum from test group by band ) g on g.band = t.band and g.maxnum = t.random_number
Voir le démo
Découvrez les fonctions de la fenêtre: stackoverflow.com/questions/3800551/...