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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

SELECT DISTINCT et plusieurs champs : possibeul ?

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

Reprise du message précédent :

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 12-03-2003 à 23:26:42  profilanswer
 

n°331631
MagicBuzz
Posté le 12-03-2003 à 23:28:19  profilanswer
 

et que le limit ne peux pas s'appliquer à une sous-requête (ce qui donnerait le bon résultat)

n°331656
arghbis
salops de dauphins
Posté le 12-03-2003 à 23:40:29  profilanswer
 

attends, si tu limite ta requête à 1, en virant le distinct, chuis désolé mais ça donne le résultat qu'il a marqué en exemple!  :pt1cable:  
 
par contre, le problème est peut être mal posé!

n°331659
MagicBuzz
Posté le 12-03-2003 à 23:41:41  profilanswer
 

si tu veux deux lignes, une pour chaque société, non

n°344189
oups93
tout le monde fait des erreurs
Posté le 26-03-2003 à 17:29:02  profilanswer
 

j'ai une question par rapport à tout ça, je l'ai exposé ici...
si vous pouvez m'éclairer...:
http://forum.hardware.fr/forum2.ph [...] subcat=395
c'est à peu pres la même chose (car je ne veux pas faire de calcul) mais je veux récupérer tous les champs de la ligne par rapport à un maxi (car dans cet exemple on a que 2 champs...)
concretement dans cet exemple:
societe    |   nom_collab   |   date    |   texte   |
-----------+----------------|-----------|-----------|
microsoft  |   billou       | 01/01/2002| gfdgd
microsoft  |   jobs         | 02/02/2002| gfdgfd
microsoft  |   bush         | 05/05/2002| tffgdf
wanadoo    |   saddam       | 02/02/2002| gfdgd
wanadoo    |   Mara's Dad   | 03/02/2002| gfdgd    
 
 
 
et j'aimerais  avoir pour chaque [société] le [nom_collab] de la derniere [Date]
 
 
societe    |   nom_collab   |   date    |   texte  |
-----------+----------------|-----------|----------|
microsoft  |   bush         | 05/05/2002| tffgdf   |
wanadoo    |   Mara's Dad   | 03/02/2002| gfdgd    |
 
coment fait on dans ce cas?

n°344231
MagicBuzz
Posté le 26-03-2003 à 17:49:01  profilanswer
 

cherche de l'aide sur le mot-clé "having"

n°344486
mrbebert
Posté le 26-03-2003 à 22:11:31  profilanswer
 

MagicBuzz a écrit :

cherche de l'aide sur le mot-clé "having"

Ca sert à sélectionner les lignes qui doivent être envoyées au client. La différence avec la clause WHERE, c'est que le HAVING est effectué au dernier moment, alors que le SGBD cherche à effectuer le WHERE le plus tot possible.
L'inconvénient, c'est que c'est moins performant qu'un WHERE.
L'avantage, c'est qu'on peut l'utiliser pour n'importe qu'elle colonne du résultat, y compris une colonne calculée.
Par exemple :
 
SELECT equipe, count(*) as c
FROM employes
GROUP BY equipe
HAVING c > 10;
ne renverra que les équipes ayant plus de 10 employés. Mais on ne pas faire la sélection c > 10 dans le WHERE


Message édité par mrbebert le 26-03-2003 à 22:11:56
n°344659
oups93
tout le monde fait des erreurs
Posté le 26-03-2003 à 23:36:40  profilanswer
 

dans mon cas, ça donnerait:
SELECT societe, nom_collab, date as D, texte
from ma_table
GROUP BY société
HAVING max(D)
 
ou bien une inversion entre le Group By et HAVING
après la question se pose pour savoir si:
HAVING MAX(...)
ça marche...
je vais tester demain, merci pour l'aide.
D'ailleur si il y a une autre solution, n'hésitez pas

n°344732
MagicBuzz
Posté le 27-03-2003 à 02:48:38  profilanswer
 

OUPS93 a écrit :

dans mon cas, ça donnerait:
SELECT societe, nom_collab, date as D, texte
from ma_table
GROUP BY société
HAVING max(D)
 
ou bien une inversion entre le Group By et HAVING
après la question se pose pour savoir si:
HAVING MAX(...)
ça marche...
je vais tester demain, merci pour l'aide.
D'ailleur si il y a une autre solution, n'hésitez pas


 
Le HAVING est bel et bien après le GROUP BY.
 
Sinon, non, ta requête sera plutôt :
 
SELECT societe, nom_collab, date as D, texte  
from ma_table  
GROUP BY societe
HAVING max(date) = D
 
En effet, le HAVING marche comme une clause WHERE, il lui faut donc une condition, pas simplement une constante ;)
 
En fait, comme l'a dit mrBebert, la requête :
 
SELECT societe, nom_collab, date as D, texte  
from ma_table  
GROUP BY societe
 
Va être effectuée, puis seuls les lignes ayant D = max(date) groupé par societe seront renvoyées. En fait, c'est un filtre de dernière minute qui se fait dans le jeu de résultat, et non dans les données elles-mêmes, d'où la baisse de perfs.

n°344828
oups93
tout le monde fait des erreurs
Posté le 27-03-2003 à 09:50:07  profilanswer
 

MagicBuzz a écrit :


En fait, comme l'a dit mrBebert, la requête :
 
SELECT societe, nom_collab, date as D, texte  
from ma_table  
GROUP BY societe
 
Va être effectuée, puis seuls les lignes ayant D = max(date) groupé par societe seront renvoyées. En fait, c'est un filtre de dernière minute qui se fait dans le jeu de résultat, et non dans les données elles-mêmes, d'où la baisse de perfs.


oui mais comme dit si bien mrBebert, la fonction HAVING sera effectuée en dernière, le server fait d'abord:
le GROUP BY societe
mais qu'est cequ'il en fait des champs non numérique? il ne peut pas agreger du texte ni des dates...
non? je me trompe sur toute la ligne?

mood
Publicité
Posté le 27-03-2003 à 09:50:07  profilanswer
 

n°345861
mrbebert
Posté le 27-03-2003 à 19:14:53  profilanswer
 

OUPS93 a écrit :


oui mais comme dit si bien mrBebert, la fonction HAVING sera effectuée en dernière, le server fait d'abord:
le GROUP BY societe
mais qu'est cequ'il en fait des champs non numérique? il ne peut pas agreger du texte ni des dates...
non? je me trompe sur toute la ligne?

:jap:  :D  
 
Mais je comprends ce que tu entends par "champs non numérique" :??:  
Tu sais bien quel est le format de chaque champ. Et ca ne varie pas d'une ligne à l'autre.

n°345990
oups93
tout le monde fait des erreurs
Posté le 27-03-2003 à 22:28:31  profilanswer
 

mrBebert a écrit :

:jap:  :D  
 
Mais je comprends ce que tu entends par "champs non numérique" :??:  
Tu sais bien quel est le format de chaque champ. Et ca ne varie pas d'une ligne à l'autre.


Euh...
J'ai confondu avec  
select A, sum(B) from.... group by A
alors je me suis dit qu'il y aurait une erreur si B etait de type Char par exemple...
il ne faut pas en tenir compte c'est moi qui délire tout seul dans mon coin :pt1cable:  :pt1cable:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

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