Order by count(...)

Le
Jérémy JUST
Bonjour,

J'aimerais ordonner des lignes d'après le nombre de lignes qui
contiennent la même valeur, mais je n'arrive pas à écrire le contenu du
COUNT().

Voilà une table d'exemple:

=> SELECT * FROM test ;
id | val
-+--
1 | 1
2 | 2
3 | 1
4 | 2
5 | 3
6 | 2
(6 rows)


Je ordonner les lignes en fonction du nombre de lignes qui ont la même
valeur « val », ce qui donnerait quelque chose comme:

id | val | count
-+--+-
5 | 3 | 1
1 | 1 | 2
3 | 1 | 2
2 | 2 | 3
4 | 2 | 3
6 | 2 | 3


J'ai commencé ainsi:

SELECT id, val,
( SELECT COUNT(*)
FROM test
WHERE val =
)
FROM test
ORDER BY 3

mais je ne sais pas comment écrire la clause WHERE dans la sous-requête.


Auriez-vous des idées? (je suis sous Postgresql 8)


--
Jérémy JUST <jeremy_just@netcourrier.com>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy JUST
Le #21852671
On Fri, 15 Jun 2007 21:08:31 +0200
Jérémy JUST
Je ordonner les lignes en fonction du nombre de lignes qui ont la même
valeur « val », ce qui donnerait quelque chose comme:

id | val | count
----+-----+----
5 | 3 | 1
1 | 1 | 2
3 | 1 | 2
2 | 2 | 3
4 | 2 | 3
6 | 2 | 3


J'ai commencé ainsi:

SELECT id, val,
( SELECT COUNT(*)
FROM test
WHERE val = ...
)
FROM test
ORDER BY 3



Désolé pour le dérangement, une fois mis sous forme d'exemple simple,
mon problème était trivial. Une réponse est:

SELECT T1.id, T1.val,
( SELECT COUNT(*)
FROM test T2
WHERE T2.val = T1.val
)
FROM test T1
ORDER BY 3 ;


La vraie requête qui me posait problème (bien plus costaude) fonctionne
aussi, maintenant.


Merci à ceux qui auraient commencé à répondre entre temps.


--
Jérémy JUST
Publicité
Poster une réponse
Anonyme