Bonjours
comment faire une requete qui retourne les valeurs répetées d'un champs dans une table
(exp: le champs 'mat contient {11,12,14,11,13,14} ma requete doit retourner
11 et 14)
merci
Bonjours
comment faire une requete qui retourne les valeurs répetées d'un champs dans une table
(exp: le champs 'mat contient {11,12,14,11,13,14} ma requete doit retourner
11 et 14)
merci
une requête select avec un Group By et un Having.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Mat FROM MaTable GROUP BY mat HAVING (count(mat)>1);
La requête SQL suivante fonctionne également
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Mat FROM MaTable GROUP BY mat HAVING (count(*)>1);
Envoyé par sillycoder
Moi je mettrais
count(1) => ca lit pas les champs donc c'est plus rapide...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Mat FROM MaTable GROUP BY mat HAVING (count(1 )>=2);
>=2 ... si je me souviens bien le having prefere ca ....
Envoyé par miloux32
avec quel sgbd ?
le premier avec tous ....Envoyé par Mathusalem
count(*) ca equivaut a faire "count(unchamp)" donc il a besoin de parcourir le bloc pour avoir la valeur du champ ....
count(1) => ben il lit 1 donc pas de lecture de champs .....
pour le having , je crois me souvenir que la clause "=" (ou >=) permet d'utiliser les index etc ...
je sais que c'est bon en oracle et en principe ca doit etre bon pour les autres ..( en plus ca coute rien de faire ca )
Je suis fort sceptique
En théorie :
COUNT(*) compte le nombre de lignes, sans s'inquiéter de leur contenu
COUNT(colonne) compte le nombre de lignes où colonne n'est pas NULL
COUNT(DISTINCT colonne) compte le nombre de valeurs distinctes de colonne, en excluant les NULL
Donc COUNT(1) ne devrait pas être très différent de COUNT(*), sinon en rajoutant un test pour la non nullité de la valeur 1
Ben je tiens ca d'un expert DBA oracle qui m'a fait une formation de tuning oracle ..... j'en discuterais à l'occasionEnvoyé par al1_24
Je ne travaille pas sur Oracle. Je ne connais donc pas bien les spécificités de ce SGBD.
Je viens de m'amuser ici à faire quelques tests sur une petite table de 250 millions de lignes, sans index unique *, avec entre autres une colonne Commentaire VARCHAR(2500)...
Temps d'exécution identique sur les quatre requêtes : 45 secondes, à 1 ou deux secondes près :
* Avec un index unique, la table n'est pas balayée mais seulement l'index, donc une poignée de secondes d'exécution !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT COUNT(*) FROM table; SELECT COUNT(1) FROM table; SELECT SUM(1) FROM table; SELECT COUNT(commentaire) FROM table;
Count(*) lit bien le bloc entier
C'est quoi un bloc ?Envoyé par Yanika_bzh
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager