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 ....
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![]()
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
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;
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
Count(*) lit bien le bloc entier
C'est quoi un bloc ?Envoyé par Yanika_bzh
Partager