2009-02-03 4 views
1

J'ai une ancienne table MySQL appelée lnk_lists_addresses avec les colonnes list_id et address_id. Je voudrais écrire une requête qui rapporte tous les cas où la même combinaison list_id - address_id apparaît plus d'une fois dans la table avec un nombre.Requête MySQL pour renvoyer uniquement les entrées en double avec les chiffres

J'ai essayé ...

SELECT count(*), list_id, address_id 
FROM lnk_lists_addresses 
GROUP BY list_id, address_id 
ORDER BY count(*) DESC 
LIMIT 20 

Il fonctionne, en quelque sorte, parce qu'il ya moins de 20 doubles. Mais comment retournerais-je seulement les comptes supérieurs à 1?

J'ai essayé d'ajouter "WHERE count(*) > 1" avant et après GROUP BY mais j'ai eu des erreurs en disant que l'instruction n'était pas valide.

Répondre

8
SELECT count(*), list_id, address_id 
FROM lnk_lists_addresses 
GROUP BY list_id, address_id 
HAVING count(*)>1 
ORDER BY count(*) DESC 

Pour combiner les réponses de mien et Todd.Run pour une réponse plus "complète". Vous souhaitez utiliser la clause HAVING:

http://dev.mysql.com/doc/refman/5.1/en/select.html

1
SELECT count(*) AS total, list_id, address_id 
FROM lnk_lists_addresses 
WHERE total > 1 
GROUP BY list_id, address_id 
ORDER BY total DESC 
LIMIT 20 

Si vous nommez le champ COUNT(), vous pouvez l'utiliser plus tard dans la déclaration.

EDIT: oublié HAVING (> _ <)

Questions connexes