6
votes

Sélectionnez ID où comptez (*)> x? - Comment obtenir des enregistrements de n'importe quel utilisateur qui a plus que X enregistrements dans le tableau?

É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.

Comment puis-je afficher l'enregistrement entier de tous les utilisateurs (identifiés par ID) qui ont plus de 10 enregistrements dans ma table?


0 commentaires

4 Réponses :


0
votes

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 )


0 commentaires

8
votes

Utilisez ayant au lieu de : xxx


3 commentaires

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.



1
votes
SELECT id, COUNT(*) FROM Table GROUP BY id HAVING COUNT(*) > 10

1 commentaires

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.



2
votes
SELECT * FROM user 
WHERE id IN (SELECT id FROM user GROUP BY id HAVING COUNT(*) > 10)

3 commentaires

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;)