Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2785 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  NOT IN

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

NOT IN

n°1645395
redah75
Posté le 19-11-2007 à 17:02:38  profilanswer
 

Bonjour tout le monde,
 
j'aimerai juste savoir si c'est normal que la clause NOT IN ne fonctionne que sur des champs de type INT. car j'aimerai connaitre tous les enregistrement (type varchar) d'une table qui ne sont pas present ds une autre table :
SELECT * FROM table1 WHERE titre1 NOT IN (SELECT titre1 FROM table2)
 
et une derniere question :)
j'ai cette requette: SELECT COUNT(id_order) AS num_art FROM transactions WHERE GROUP BY nom
 
je souhaiterai classer mes resultats par num_art mais j'y arrive pas, comment devrais je faire???
 
Merci infiniment pour votre aide.
Reda

mood
Publicité
Posté le 19-11-2007 à 17:02:38  profilanswer
 

n°1645402
tpierron
Posté le 19-11-2007 à 17:12:56  profilanswer
 

Tu ne confondrais pas ORDER BY et GROUP BY dès fois ?

n°1645412
dwogsi
Défaillance cérébrale...
Posté le 19-11-2007 à 17:30:06  profilanswer
 

Ca marche pas... Ok! Mais ça renvoi une erreur ou pas les bons résultats?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1645418
redah75
Posté le 19-11-2007 à 17:37:48  profilanswer
 

Merci pour vos reponses.
 
je me suis juste trompe, j'ai mis group by au lieu de order by :D
lorsque je mets order by num_art ou order by id_order j'ai le message d'erreur suivant:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Users\rhassani\Web site\www\fridoc\traitement.php on line 11
 
 
concernant la requette NOT IN, j'ai aucun message d'erreur, c'est juste que ca met trop de temps avt de me renvoyer 0 resultat!!

n°1645440
dwogsi
Défaillance cérébrale...
Posté le 19-11-2007 à 18:11:45  profilanswer
 

Version de MySQL?
Sinon ya aussi mysql_error() qui existe, pour des messages d'erreur plus parlant.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1646049
redah75
Posté le 20-11-2007 à 18:57:41  profilanswer
 

j'ai MySQL version 4.1.13.
 
c pas grave pour le NOT IN, le plus important est que je puisse afficher mes resultats par ordre du COUNT(), savez vous cmt pourrais je faire???
 
Merci

n°1646064
Giz
Posté le 20-11-2007 à 19:11:07  profilanswer
 

Le not in c'est caca je crois pour les perfs :o.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1646083
tpierron
Posté le 20-11-2007 à 19:43:39  profilanswer
 

redah75 a écrit :

c pas grave pour le NOT IN, le plus important est que je puisse afficher mes resultats par ordre du COUNT(), savez vous cmt pourrais je faire???


 
Qu'est ce que tu veux faire exactement ? un count sur une colone va te retourner qu'un seul enregistrement au final. Pour avoir plusieurs lignes avec count, il faut un group by. En fait j'ai l'impression que ta requète est un mix en group by et order by. Un exemple de ce que tu as en entrée et de ce que tu veux en sortie ?

n°1646166
MagicBuzz
Posté le 20-11-2007 à 22:58:18  profilanswer
 

pas de mot clé "WHERE" quand t'as pas de filtre (et ici t'as pas de filtre)
 
ensuite, GROUP BY permet d'énumérer les colonnes de regroupements (toutes celles sur lesquelles tu ne fais pas d'agrégation, donc ici... "nom" (que tu ne selectionnes même pas)
 
et il ne te dispense pas d'un ORDER BY, qui va te permettre de trier l'ordre des résultats, donc ici sur "num_art" par ordre "desc" pour descendant.

n°1646325
MEI
|DarthPingoo(tm)|
Posté le 21-11-2007 à 10:25:56  profilanswer
 

cad que y'a des SGBD qui font le order by en meme temps que group by. :'(


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
mood
Publicité
Posté le 21-11-2007 à 10:25:56  profilanswer
 

n°1646343
MagicBuzz
Posté le 21-11-2007 à 10:33:11  profilanswer
 

non.
 
le order by et le group by sont deux instructions absolument différentes.
 
un effet de bord du group by, c'est en effet parfois, sur certains SGBD de faire un order by "ASC" sur les champs stipulés dans le group by (le plus facile pour effectuer un regroupement sur des tuples, c'est pour sûr de les trier, c'est donc le résultat inattendu du regroupement). mais dans tous les cas, rien ne te dispense de faire un order by dans la foulée, pour re-trier le résultat final selon d'autres critères.
 
le group by, c'est une intruction effectuée au début de la requête, entre le moment où les données sont retrouvées en fonction des clauses "select/from/where" et les calculs d'agrégation sur les résutlats (sum, coun, min, etc.)
 
ensuite, vient le having, qui permet d'effectuer un "where" une fois les fonctions d'agrégation effectuées (donc on peut filter sur le résultat des aggrégations)
 
enfin, le order by est évalué, sur le résultat final de la requête. il vient donc écraser tout éventuel tri qui aurait été effectué avant.
 
a noter que le group by n'est pas le seul élément qui effectue des tris implicites. les index utilisés par la requête font aussi un tri implicite, puisqu'ils sont ordonnées, et sont utilisés pour retrouver les lignes.
 
tiens, je vais mettre à jour mon topic SGBD avec un exemple... (j'espère que ça va marcher :D)

n°1646724
redah75
Posté le 21-11-2007 à 18:15:47  profilanswer
 

Bonjour a tous. et merci MagicBuzz pour tes explication...
 
c super, mon script marche mnt, je ne savais juste pas qu'on pouvait mettre group by et aussi order by ds la meme requete!!! :)
 
une petite question, ca sert a quoi le 'having'??? j'ai pas bien compris :(
 
merci encore une fois

n°1646737
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-11-2007 à 18:32:15  profilanswer
 

quand tu utilises un fonction d'aggrégation tu ne peux pas mettre de condition sur celle-ci dans ton where.
En effet le where filtre les lignes préalablement à l'éxécution des agrégats ( comme l'expliquait magic).

 

La solution pour conditionner le résultat d'un agrégat est donc d'utiliser having.
Par exemple on cherche les eleves dont la moyenne est supérieure à 10 et le nom comme par B

Code :
  1. SELECT
  2. nom,
  3. avg(note)
  4. FROM
  5. Eleves
  6. INNER JOIN Notes ON Eleves.id = Notes.id_eleve
  7. WHERE
  8. Eleves.nom LIKE 'B%'
  9. GROUP BY
  10. Eleves.nom
  11. HAVING
  12. avg(note)>10


Message édité par anapajari le 21-11-2007 à 18:33:41
n°1647171
redah75
Posté le 22-11-2007 à 13:37:54  profilanswer
 

OK, je ne savais pas non plus qu'on pouvais pas mettre AVG/MIN/MAX(note) > 10 dans le WHERE... :)
 
merci encore une fois pour cette info ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  NOT IN

 

Sujets relatifs
Problème avec fonction IF NOT EXIST[mysql] NOT EXISTS
SQlite + Python: Problème de "CREATE TABLE IF NOT EXISTS"IN / NOT IN sur Tris Liste -> Souci!
Newbies NULL & NOT NULLErreurs : Not a statement
KSH - SQL plus : : Not FoundCrystal Report - Condition Not Null
Not IN Not Exists sous MySQL?aide pour un NOT IN sur un resultat d'une requete
Plus de sujets relatifs à : NOT IN


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR