Évidemment, la requête dans le titre ne fonctionne pas, mais cela pourrait illustrer de manière naïve, ce que je voudrais faire. J'ai une table contenant des utilisateurs identifiés par une colonne ID. Cet identifiant n'est pas unique dans la base de données. Il marque un utilisateur qui peut avoir plusieurs enregistrements dans ma table. P>
Comment puis-je afficher l'enregistrement entier de tous les utilisateurs (identifiés par ID) qui ont plus de 10 enregistrements dans ma table? P>
4 Réponses :
Voici comment:
CREATE TABLE mytable_clean AS SELECT * FROM mytable WHERE id IN( SELECT id FROM (SELECT id,COUNT(*) AS appearance FROM mytable GROUP BY id) AS id_count WHERE id_count.appearance > 9 )
Utilisez
Celui-ci est vraiment rapide et a exactement le même résultat que ma requête. Bien que ce soit plus élégant, bien sûr;). Pourquoi cette petite différence est-elle de causer autant de différences par rapport à l'approche de Ishtar?
C'est exactement la même chose que mon approche à l'exception de la mine n'a pas la déclaration de sélection supplémentaire qui l'entoure. Pourquoi avez-vous besoin de la sélection supplémentaire?
Je n'en ai pas besoin, cela vous permet de trier par des colonnes non agrégées avec sélection ultérieure.
SELECT id, COUNT(*) FROM Table GROUP BY id HAVING COUNT(*) > 10
Supprimer le nombre (*) depuis le début Si vous voulez juste que l'ID est, mais je l'ai placé pour montrer le nombre total pour chaque identifiant de la table.
SELECT * FROM user WHERE id IN (SELECT id FROM user GROUP BY id HAVING COUNT(*) > 10)
Je ne peux pas vraiment dire pourquoi, mais c'est vraiment long par rapport à la mienne.
@ ran2 - long? Que veux-tu dire? Ralentir??
Dammit. Je ne sais pas ce que je pensais quand tu écrivais ça. Je voulais probablement écrire cela prend plus de temps que le mien. Bonne hypothèse, cependant;)