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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SELECT DISTINCT et plusieurs champs : possibeul ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

SELECT DISTINCT et plusieurs champs : possibeul ?

n°331250
skylight
Made in France.
Posté le 12-03-2003 à 21:17:26  profilanswer
 

Voilà
 
SELECT DISTINCT truc FROM pouet;
 
ok, on a les valeurs en un exemplaire.
 
 
SELECT DISTINCT truc,hehe FROM pouet;
 
apparement ca m'envoie toute la patate ...  
 
donc ? :heink:

mood
Publicité
Posté le 12-03-2003 à 21:17:26  profilanswer
 

n°331273
urd-sama
waste of space
Posté le 12-03-2003 à 21:24:41  profilanswer
 

Skylight a écrit :

Voilà
apparement ca m'envoie toute la patate ...  


 :??:


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
n°331280
skylight
Made in France.
Posté le 12-03-2003 à 21:27:35  profilanswer
 

exemple
 
table contact
 

societe    |   nom_collab
-----------+----------------
microsoft  |   billou
microsoft  |   jobs
microsoft  |   bush
wanadoo    |   saddam


 
 
SELECT DISTINCT societe FROM contact;
 
ok, j'ai
 

microsoft
wanadoo


 
 
moi en plus de ca, j'aimerai recuperer le champ nom_collab de la ligne qu'il prend en distinct ...
 
donc
 
SELECT DISTINCT societe,nom_collab FROM contact;
 
me donne :  
 
 

societe    |   nom_collab
-----------+----------------
microsoft  |   billou
microsoft  |   jobs
microsoft  |   bush
wanadoo    |   saddam


 
 
et j'aimerais  
 

societe    |   nom_collab
-----------+----------------
microsoft  |   billou
wanadoo    |   saddam


 
:/
 
j'ai testé plusieurs syntaxes .. DISTINCT (champ),truc ...


Message édité par skylight le 12-03-2003 à 21:28:52
n°331285
urd-sama
waste of space
Posté le 12-03-2003 à 21:30:23  profilanswer
 

en faisant ton distinct sur 2 champs, il t'aurait éviter de retourner 2 enregistrements égaux (par exemple tu aurais microsoft;bilou à 2 places, il te le rendrait qu'une fois).
pour ta question, je crois que c'est plutot du group by societe (à confirmer, je confonds tjs ces trucs)


Message édité par urd-sama le 12-03-2003 à 21:30:38

---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
n°331290
skylight
Made in France.
Posté le 12-03-2003 à 21:32:31  profilanswer
 

Urd-sama a écrit :

en faisant ton distinct sur 2 champs, il t'aurait éviter de retourner 2 enregistrements égaux (par exemple tu aurais microsoft;bilou à 2 places, il te le rendrait qu'une fois).
pour ta question, je crois que c'est plutot du group by societe (à confirmer, je confonds tjs ces trucs)


 
group by societe va simplement regrouper les trucs ensemble mais c'est deja trié ...
 
ptet du coté de having, faudrait que je matte ...

n°331291
ZeBorG
Yes we can!
Posté le 12-03-2003 à 21:32:51  profilanswer
 

GROUP BY societe
 
[edit] grilled


Message édité par ZeBorG le 12-03-2003 à 21:33:39
n°331299
skylight
Made in France.
Posté le 12-03-2003 à 21:37:19  profilanswer
 

Ah ben si, ca marche [:mlc]
 
bizarre, j'étais persuadé que GROUP BY ne supprimais pas les doublons

n°331305
ZeBorG
Yes we can!
Posté le 12-03-2003 à 21:39:45  profilanswer
 

Skylight a écrit :

Ah ben si, ca marche [:mlc]
 
bizarre, j'étais persuadé que GROUP BY ne supprimais pas les doublons

GROUP BY xxx= regroup les éléments de la colone xxx qui ont la même valeur

n°331309
skylight
Made in France.
Posté le 12-03-2003 à 21:40:46  profilanswer
 

ok :jap:
 
 
je confondais avec le order :cry:

n°331311
nraynaud
lol
Posté le 12-03-2003 à 21:42:26  profilanswer
 

Skylight a écrit :

Ah ben si, ca marche [:mlc]
 
bizarre, j'étais persuadé que GROUP BY ne supprimais pas les doublons


 
raté, c'est l'inverse.

mood
Publicité
Posté le 12-03-2003 à 21:42:26  profilanswer
 

n°331319
mrbebert
Posté le 12-03-2003 à 21:47:37  profilanswer
 

Le DISTINCT ne porte pas sur une colonne, mais sur toute la ligne [:proy]

n°331328
urd-sama
waste of space
Posté le 12-03-2003 à 21:52:18  profilanswer
 

mrBebert a écrit :

Le DISTINCT ne porte pas sur une colonne, mais sur toute la ligne [:proy]  


sur les champs sélectionnés dans la requete


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
n°331331
Mara's dad
Yes I can !
Posté le 12-03-2003 à 21:54:03  profilanswer
 

Oulala que de mélanges !
 
SELECT DISTINCT societe,nom_collab FROM contact;
OK, tous les enregs retournés sont différents
 
SELECT DISTINCT societe FROM contact;
ET
SELECT societe FROM contact GROUP BY societe;
 
Retourne la même chose dans ce cas car il n'y a qu'un seul champs.
 
Si tu veux plusiseurs champs, tu fait un GROUP BY sur le champs pour lequel tu veux un regroupement, mais pour les autres, ils faut donner une fonction "d'agrégation".
 
Par exemple
SELECT societe, nom_collab FROM contact GROUP BY societe;
Va planter :D
Ok, il fait le regroupement sur societe, mais que fait-il avec nom_collab ?
Avec ton exemple, quel nom_collab doit-il retourner pour microsoft ?
Ben le serveur peut pas le deviner.
 
Donc par exemple
SELECT societe, first(nom_collab) FROM contact GROUP BY societe;
Dans ce cas, la fonction d'agrégation est first. elle retourne le premier élément d'un ensemble.
D'autres fonctions ? count(), sum(), average(), last()...
 
Une fonction d'agrégation, c'est donc une fonction qui retourne un seul élément pour un ensemble.
 
Bon un dernier exemple :
SELECT societe, count(nom_collab) NB FROM contact GROUP BY societe;
doit donner :
 

societe    |   NB
-----------+----------------  
microsoft  |   3
wanadoo    |   1


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331332
mrbebert
Posté le 12-03-2003 à 21:54:07  profilanswer
 

Urd-sama a écrit :


sur les champs sélectionnés dans la requete

oui, les lignes du résultat :)

n°331334
Mara's dad
Yes I can !
Posté le 12-03-2003 à 21:55:27  profilanswer
 

Précision :
 
Il est tout a fait possible de faire un GROUP BY sur plusieurs champs...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331335
skylight
Made in France.
Posté le 12-03-2003 à 21:55:38  profilanswer
 

Mara's DAD -> :jap:
 
au moins tout le monde a appris quelque chose ce soir :D

n°331338
skylight
Made in France.
Posté le 12-03-2003 à 21:56:23  profilanswer
 

Mara's dad a écrit :

Précision :
 
Il est tout a fait possible de faire un GROUP BY sur plusieurs champs...


GROUP BY champ1,champ2
 
lequel sera prioritaire ?

n°331339
Mara's dad
Yes I can !
Posté le 12-03-2003 à 21:57:02  profilanswer
 

Skylight a écrit :


GROUP BY champ1,champ2
 
lequel sera prioritaire ?


 
A ton avis ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331341
skylight
Made in France.
Posté le 12-03-2003 à 21:57:30  profilanswer
 

champ1 ? [:meganne] :D

n°331342
mrbebert
Posté le 12-03-2003 à 21:58:03  profilanswer
 

Skylight a écrit :


GROUP BY champ1,champ2
 
lequel sera prioritaire ?

Y a pas de champ prioritaire, c'est un couple.
Il regroupera toute les lignes où champ1 ET champ2 sont identiques :)
Mais tu pourras avoir des lignes différentes ayant le même champ1 (et donc des champs2 différents)


Message édité par mrbebert le 12-03-2003 à 21:58:39
n°331344
Mara's dad
Yes I can !
Posté le 12-03-2003 à 21:59:54  profilanswer
 

J'en était sûr  :non:  
 
Ben non !
 
Aucun !
 
Ce que tu lui demande c'est de ne pas avoir deux lignes de résultat qui ont le même couple champ1, champs2.
 
Aucun des deux n'est prioritaire, çà n'as pas de sens de se poser cette question  :D  
 
Tu confonds encore avec ORDER BY !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331345
skylight
Made in France.
Posté le 12-03-2003 à 22:00:28  profilanswer
 

:cry:

n°331355
Mara's dad
Yes I can !
Posté le 12-03-2003 à 22:05:12  profilanswer
 

T'inquiète pas !
 
Un serveur de BDD, faut le prendre comme un gros bourrin qui fait STRICTEMENT ce qu'on lui dit.
 
C'est juste un bon ouvrier. Faut lui demander calmement ce qu'on veut.
 
La difficulté est de savoir l'exprimer.
 
Pour çà, y'a pas de secret, faut d é c o m p o s e r.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331365
MagicBuzz
Posté le 12-03-2003 à 22:11:17  profilanswer
 

GROUP BY, ça sert que pour les calculs, chais pas ce que vous avez à le sortir à toutes les sauces pour chaque problème :heink:
 
Exemple :
 


 ID | V1 | V2 | V3
----|----|----|----
  1 |  A |  A |  A
  2 |  A |  A |  B
  3 |  A |  B |  A
  4 |  A |  B |  B
  5 |  B |  A |  A
  6 |  B |  A |  B
  7 |  B |  B |  A
  8 |  B |  B |  B


 

Code :
  1. SELECT COUNT(ID), V1, V2, V3 FROM T
  2. -> ERROR: V1, V2 et V3 ne font pas partie de la clause GROUP BY


 

SELECT COUNT(ID), V1, V2, V3 FROM T GROUP BY V1, V2, V3


 

CNT | V1 | V2 | V3
-----|----|----|----
   1 |  A |  A |  A
   1 |  A |  A |  B
   1 |  A |  B |  A
   1 |  A |  B |  B
   1 |  B |  A |  A
   1 |  B |  A |  B
   1 |  B |  B |  A
   1 |  B |  B |  B


 

SELECT COUNT(ID), V1
FROM T
WHERE V2 = V3
AND ID > 4
GROUP BY V1


 
=> Seules lignes à répondre aux conditions
 

 ID | V1 | V2 | V3
-----|----|----|----
   5 |  B |  A |  A
   8 |  B |  B |  B


 
=> Donc, comme V1 est identique dans les deux lignes, on n'a qu'une seule ligne, donc un COUNT = 2 :
 

CNT | V1 |
-----|----|
   2 |  B |


 

SELECT COUNT(ID)
FROM T
WHERE V2 = 'A'
AND V1 <> V3
GROUP BY V1


 
Seules lignes à répondre aux conditions :
 

ID | V1 | V2 | V3
----|----|----|----
  2 |  A |  A |  B
  5 |  B |  A |  A


 
Donc comme V1 est différent dans les deux lignes, même si on ne l'affiche pas, on a deux lignes :
 

CNT
---
  1
  1


Voilà, ça sert à ça, et uniquement à ça le GROUP BY.
 
-- Edit : Quelques explication et une correction --


Message édité par MagicBuzz le 12-03-2003 à 22:15:05
n°331369
skylight
Made in France.
Posté le 12-03-2003 à 22:12:31  profilanswer
 

on va décomposer ton post, magic, calme ... :D

n°331382
ZeBorG
Yes we can!
Posté le 12-03-2003 à 22:17:34  profilanswer
 

Mara's dad > le first() n'exist pas dans MySQL il me semble
 
http://www.mysql.com/doc/en/Group_by_functions.html

n°331383
Mara's dad
Yes I can !
Posté le 12-03-2003 à 22:18:08  profilanswer
 


 
J'sais pas s'qui zon avec SQL ce soir :pt1cable:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331400
mrbebert
Posté le 12-03-2003 à 22:22:10  profilanswer
 

Mara's dad a écrit :


 
J'sais pas s'qui zon avec SQL ce soir :pt1cable:  

C'est un sujet hautement passionnant, à n'importe quelle heure du jour et de la nuit :)

n°331401
Mara's dad
Yes I can !
Posté le 12-03-2003 à 22:22:10  profilanswer
 

ZeBorG a écrit :

Mara's dad > le first() n'exist pas dans MySQL il me semble
 
http://www.mysql.com/doc/en/Group_by_functions.html


 
Ok, mais c'est la première fois que tu parles de MySql dans ce post !
 
Mais si c'est un first qui n'éxiste pas qui te gène, ben faut réfléchir un peut, y'a surement moyen de s'en sortir.
 
Quelle version de MySql ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°331496
arghbis
salops de dauphins
Posté le 12-03-2003 à 22:47:11  profilanswer
 

moi je dirais, regarde du côté de la clause LIMIT

n°331502
ZeBorG
Yes we can!
Posté le 12-03-2003 à 22:48:26  profilanswer
 

b'en c'est pas mon post :D  
 
Le miens il est là :
http://forum.hardware.fr/forum2.php3?post=33559&cat=10
 
(MySQL 3.23.54)


Message édité par ZeBorG le 12-03-2003 à 22:49:07
n°331515
skylight
Made in France.
Posté le 12-03-2003 à 22:52:39  profilanswer
 

arghbis a écrit :

moi je dirais, regarde du côté de la clause LIMIT

:heink:

n°331520
ZeBorG
Yes we can!
Posté le 12-03-2003 à 22:53:12  profilanswer
 

par défaut, mySQL utilise le premier lors d'un GROUP BY (comme si il y avez un first() en fait...)

n°331525
MagicBuzz
Posté le 12-03-2003 à 22:54:23  profilanswer
 

encore un truc vachement standard tiens...
 
pour info, select a, b from t group by a plante si b nb'est pas un fonctrion d'agrégation (calcul) d'après la norme SQL


Message édité par MagicBuzz le 12-03-2003 à 22:54:50
n°331533
ZeBorG
Yes we can!
Posté le 12-03-2003 à 22:57:37  profilanswer
 

ZeBorG a écrit :

par défaut, mySQL utilise le premier lors d'un GROUP BY (comme si il y avez un first() en fait...)

correction : ça dépands du ORDER BY en fait...

n°331536
mrbebert
Posté le 12-03-2003 à 22:58:11  profilanswer
 

ZeBorG a écrit :

correction : ça dépands du ORDER BY en fait...

Effectivement, ca ne revient pas tout à fait au même [:figti]  :D

n°331537
ZeBorG
Yes we can!
Posté le 12-03-2003 à 22:58:28  profilanswer
 

MagicBuzz a écrit :

encore un truc vachement standard tiens...
 
pour info, select a, b from t group by a plante si b nb'est pas un fonctrion d'agrégation (calcul) d'après la norme SQL

MySQL se veut grand publique, j'imagine qu'ils ont voulu "protéger" les utilisateurs...
 
[deit] correction des fotes [:tilleul]


Message édité par ZeBorG le 12-03-2003 à 23:06:25
n°331538
skylight
Made in France.
Posté le 12-03-2003 à 22:59:12  profilanswer
 

ZeBorG a écrit :

MySQL ce veux grqnd publique, j'imagine qu'ils ont voulu "protéger" les utilisateurs...


 
du francais ? [:totoz]

n°331615
arghbis
salops de dauphins
Posté le 12-03-2003 à 23:22:52  profilanswer
 

ben pq tu essaie pas limite???
genre select distinct machin, truc from matable group by machin limit 1;
 
à peu de choses près, ce doit être ça!

n°331624
ZeBorG
Yes we can!
Posté le 12-03-2003 à 23:26:42  profilanswer
 

arghbis a écrit :

ben pq tu essaie pas limite???
genre select distinct machin, truc from matable group by machin limit 1;
 
à peu de choses près, ce doit être ça!

par ce que ce n'est pas du tout le résultat qu'il cherche à avoir...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  SELECT DISTINCT et plusieurs champs : possibeul ?

 

Sujets relatifs
DELETE de plusieurs lignes et de plusieurs tables?Plusieurs questions...
ajout immédiat de champs de formulaire avec un bouton checkbox[Access] Formulaire : calcul sur le contenu de deux champs avec bouton
retrouver tous les nom des champs d'un formulaireComment écrire sur plusieurs lignes ds un txt, en php
Checker si un champs est pleinchamps monétaire
XML: c'est valable plusieurs noeuds enfants de même nom?Afficher les valeurs d'un champs commençant par une lettre précise?
Plus de sujets relatifs à : SELECT DISTINCT et plusieurs champs : possibeul ?


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