Récupérer le résultat d'un COUNT() SQL

Fermé
Revan - 14 déc. 2010 à 15:43
newkiss Messages postés 127 Date d'inscription mardi 7 septembre 2010 Statut Membre Dernière intervention 12 janvier 2015 - 22 déc. 2010 à 12:01
Bonjour,

J'ai un petit soucis, je bosse sur un forum et je dois réussir à sélectionner le post qui a le plus de réponse.
La table est constituée de 3 champs : id_post, Numero_reponse, Text_reponse.

Je voudrais donc afficher uniquement LE ou LES posts (si plusieurs post ont le même nombre de réponses) qui ont le plus de réponses.

J'arrive bien à compter le nombre de réponses pour chaque post avec cette requête :


SELECT COUNT(id_post) FROM REPONSE GROUP BY Numero_reponse



Toutefois je n'arrive pas à transcrire "Utilise le précédent résultat et sélectionne le ou les plus grand chiffres précédemment comptés".

J'ai bien essayé avec la commande MAX() mais sans grand succès.

Pourriez-vous m'aider à me débloquer je vous prie ?

Sachant que je dois faire ça en une seule requête SQL donc pas de php ou autre langage...


Merci d'avance !

8 réponses

MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 16:13
Bonjour,

Peut - être que cela pourra t'aider:

select max(nb)
from
(
  select count(id_post)
  from reponse
  group by Numero_reponse
) 


Bien à toi,
MyTux.
0
Merci de ta réponse rapide.

Toutefois j'ai un message d'erreur à l'exécution que je n'ai jamais eu auparavant :

#1248 - Every derived table must have its own alias

Pourrais-tu m'éclairer ?

Merci.

Cordialement,

Revan
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
14 déc. 2010 à 18:31
Re bonjour,

Oui en effet, le système te demande de lui fournir un alias donc reprend la query ainsi:
select max(nb)
from
(
  select count(id_post)
  from reponse as nb
  group by Numero_reponse
) as reponse;


Avec explication de la doc mysql:
http://dev.mysql.com/doc/refman/5.0/en/from-clause-subqueries.html

Bien à toi,
MyTux.
0
Bonjour,

Merci bien, pour cette réponse mais malheureusement, j'ai toujours une erreur, me disant qu'il ne connait pas le champs nb, et c'est l'erreur que j'avais au début, qui fait que je ne sais pas comment récupérer le résultat du COUNT...

Pourrais-je solliciter une nouvelle fois de l'aide ?

Merci.

Cordialement,
Revan
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
15 déc. 2010 à 13:04
Bonjour,

L'erreur vient de ma part. En fait la query est:
select max(nb)
from
(
  select count(id_post) as nb
  from reponse
  group by Numero_reponse
) as reponse;


Bien à toi,
MyTux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup cela fonctionne, enfin presque :)

En effet, j'ai deux posts qui ont deux réponses chacun, toutefois la requête ne me renvoie qu'un post sur les deux...

Tu vas me haïr, désolé :)


Cordialement,
Revan


EDIT : Rectification : En ajoutant une réponse dans le post numéro 3, donc le post numéro 3 contient 3 réponse et le post 1 2 réponses, la requête me renvoie toujours comme résultat le post 1
0
MyTux Messages postés 222 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 26 mars 2013 44
15 déc. 2010 à 13:29
Bonjour,

Pour reprendre, tu veux afficher les messages qui ont le plus de postes c'est ça? Si c'est le cas, il faut imposer une limite dans ta requête. Car comment il va savoir, ceux qu'il faut afficher?

Bien à toi,
MyTux.
0
Pour reprendre, je veux afficher l'ID des posts contenant le plus de messages.

Dans le cas où le post 2 contient 2 messages et le post 3 2 message, le résultat de la requête doit renvoyer 2 ET 3.

Dans le cas où le post 2 contient 8 messages et les autres moins, le résultat de la requête doit être 2.

Cordialement,
Revan


EDIT : J'ai fait une erreur, j'avais inversé les champs comme un boul**, la requête fonctionne bien pour récupérer UN post, toutefois il y a toujours le soucis de récupération du cas où il y a plus d'un post avec un nombre égal de messages.
0
newkiss Messages postés 127 Date d'inscription mardi 7 septembre 2010 Statut Membre Dernière intervention 12 janvier 2015 13
22 déc. 2010 à 11:57
Essai ca

select id_post from reponse
group by id_post
having count(*) = (
select max(nb)
from
(
  select count(id_post) as nb
  from reponse
  group by Numero_reponse
) as reponse
)
0
newkiss Messages postés 127 Date d'inscription mardi 7 septembre 2010 Statut Membre Dernière intervention 12 janvier 2015 13
22 déc. 2010 à 12:01
Ou ca

SELECT id_post
FROM reponse
GROUP  BY id_post
HAVING COUNT(*) >= ALL (
     SELECT COUNT(*)
     FROM   reponse
     GROUP  BY id_post
)
0