[RESOLU]SELECT MAX avec GROUP BY

SELECT MAX avec GROUP BY [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 07-06-2008 à 01:59:58    

Bonjour à tous,
 
Voila j'ai une simple table 'votes' qui contient 2 champs tout 2 clé primaire
ip -  id
 
Et je voudrais afficher l'id qui contient le plus d'ip.
Voila la requête que j'ai pondu:
 

Code :
  1. SELECT id, count(ip)
  2. FROM votes
  3. GROUP BY ip
  4. HAVING MAX(count(ip))


 
La requête ne fonctionne pas et je n'arrive pas à l'écrire autrement.
 
Merci de votre aide


Message édité par spos93 le 07-06-2008 à 13:51:34
Reply

Marsh Posté le 07-06-2008 à 01:59:58   

Reply

Marsh Posté le 07-06-2008 à 13:11:30    

Quel SGBD ?
 
Avec MySQL :
 
select id
from (
  select id,count(1) c
  from votes
  group by id
)
order by c desc
limit 1
 
On crée une sous requête qui renvoie les id avec leur nombre d'ip ("c" ) et on prend la ligne avec le plus grand "c", c'est à dire la 1ère quand on trie par "c" décroissant :)

Reply

Marsh Posté le 07-06-2008 à 13:51:17    

Bon ba écoute merci mrbebert ça marche parfaitement. Je viens d'apprendre que l'on peut créer sa propre sous table et la mettre dans un FROM.
 
Une toute petite correction  
 

Code :
  1. SELECT id
  2. FROM (
  3. SELECT id, count( 1 ) c
  4. FROM votes
  5. GROUP BY id
  6. )temp
  7. ORDER BY c DESC
  8. LIMIT 1


 
Il faut ajouter un un nom 'temp' à table crée car sinon mySQL te répond
#1248 - Every derived table must have its own alias  
 
Encore merci :)
 

Reply

Marsh Posté le 08-06-2008 à 02:46:56    

je vois franchement pas l'interet de construire une requete dérivée pour ca !
 
c'est pas 10x plus simple ? :

Code :
  1. SELECT id
  2. FROM votes
  3. GROUP  BY id
  4. ORDER  BY count( ip )  DESC
  5. LIMIT 1

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed