Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > Informix
Informix Forum d'entraide Informix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2006, 15h33   #1
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut Fonction Group By

Voila j'utilise une requete sql de ce type :

SELECT DISTINCT SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT)
FROM CLIENT, ADRESSE
WHERE CLIENT.CODE=ADRESSE.CODE
AND CLIENT.AGE < '40'
AND ADRESSE.DEP = '33'
GROUP BY SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT)

Mais j'ai un message d'erreur à mon avis suite à la fonction SUBSTR dans le group by

qqn peut-il m'aider ?
Merci
Infomax7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h40   #2
Membre actif
 
Avatar de TheRussian
 
Inscription : avril 2003
Messages : 170
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 170
Points : 177
Points : 177
Bonjour,

pour afficher les requêtes utilise les balises [ Code ] .
Sinon je pense que ceci devrait aller :

Code :
1
2
3
4
5
6
7
 
SELECT SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT) 
FROM CLIENT, ADRESSE 
WHERE CLIENT.CODE=ADRESSE.CODE 
AND CLIENT.AGE < '40' 
AND ADRESSE.DEP = '33' 
GROUP BY SUBSTR(client.nom,1,1), client.age, adresse.ville
Si cela ne va pas il me faut plus d'info sur le message d'erreur
TheRussian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h59   #3
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Arf je dirais plutôt ca :
Code :
1
2
3
4
5
6
SELECT DISTINCT SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT)
FROM CLIENT, ADRESSE
WHERE CLIENT.CODE=ADRESSE.CODE
AND CLIENT.AGE < '40'
AND ADRESSE.DEP = '33'
GROUP BY client.nom, client.age, adresse.ville,CLIENT.MNT
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h22   #4
Inactif
 
Avatar de Médiat
 
Inscription : décembre 2003
Messages : 1 946
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 946
Points : 1 932
Points : 1 932
Ou plutôt (comme TheRussian):
Code :
1
2
3
4
5
6
SELECT SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT) 
FROM CLIENT, ADRESSE 
WHERE CLIENT.CODE=ADRESSE.CODE 
AND CLIENT.AGE < '40' 
AND ADRESSE.DEP = '33' 
GROUP BY SUBSTR(client.nom,1,1), client.age, adresse.ville
J'ai gardé la même jointure, mais si possible, il vaudrait mieux un INNER JOIN.

Private joke : C'est juste pour revoir l'avatar de BiMouXeTTe (ceci dit je ne plaisantais, il est superbe ton avatar, qui est-ce ?)
Médiat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h29   #5
Membre actif
 
Avatar de TheRussian
 
Inscription : avril 2003
Messages : 170
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 170
Points : 177
Points : 177
Désolé d'interrompre cet instant

Mais je maintiens ma requête pour 2 raisons :

- Avec un GROUP BY, un distinct ne sert pas à grand chose
- Si le but est de faire la somme de CLIENT.MNT, il ne faut pas mettre cette zone dans le group by car il y aura une ligne par MNT, et non la somme.
Je vous laisse
TheRussian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h34   #6
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Dans certains SGBD, il faut mettre toutes les colonnes dans le GROUP BY.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h37   #7
Inactif
 
Avatar de Médiat
 
Inscription : décembre 2003
Messages : 1 946
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 946
Points : 1 932
Points : 1 932
Citation:
Envoyé par TheRussian
Mais je maintiens ma requête pour 2 raisons :
Je suis bien d'accord, et c'est pour cela que je l'ai confirmée
Médiat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h52   #8
Inactif
 
Avatar de Médiat
 
Inscription : décembre 2003
Messages : 1 946
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 946
Points : 1 932
Points : 1 932
Si tu enlèves le substr dans le GROUP BY, tu vas avoir une ligne par "nom de client", alors que Infomax7 semble vouloir une ligne par initiale du nom de client.
Médiat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h53   #9
Membre Expert
 
Avatar de davcha
 
Inscription : avril 2004
Messages : 1 132
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 1 132
Points : 1 190
Points : 1 190
Citation:
Envoyé par BiMouXeTTe
Ceci dit, j'enleverai le Substr(), non ?
Celui du group by ? Non.

Si tu fais un groupement par nom complet, tu n'auras pas le même résultat que si tu fais un groupement par initiale.
davcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 21h10   #10
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut La raison of TheRusian

Salut à tous !
Désolé pour le retard mais j'ai absolument besoin du SUBSTR().

TheRussian à raison à propos du DISTINCT.
Je n'en ai pas vraiment besoin...
Infomax7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2006, 10h39   #11
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
C'est une base Informix
Infomax7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2006, 16h02   #12
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Non je ne pense pas mais dans SQL Server, si tu ne met pas tous les champs dans GROUP BY, ca ne fonctionne pas...
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2006, 19h16   #13
Membre actif
 
Avatar de TheRussian
 
Inscription : avril 2003
Messages : 170
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 170
Points : 177
Points : 177
Citation:
Envoyé par BiMouXeTTe
Non je ne pense pas mais dans SQL Server, si tu ne met pas tous les champs dans GROUP BY, ca ne fonctionne pas...
J'utilise SQL Server tous les jours et je n'ai pas besoin de faire cela.
TheRussian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 00h30   #14
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Et pourtant c'est bien le seul SGBD qui me demandait de mettre tous les champs dans le GROUP BY. Peut être n'est cepas nécessaire sur les versions plus récentes.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 01h17   #15
Membre Expert
 
Avatar de davcha
 
Inscription : avril 2004
Messages : 1 132
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 1 132
Points : 1 190
Points : 1 190
Citation:
Envoyé par BiMouXeTTe
Et pourtant c'est bien le seul SGBD qui me demandait de mettre tous les champs dans le GROUP BY. Peut être n'est cepas nécessaire sur les versions plus récentes.
C'est quoi la différence entre ça :
Code :
1
2
3
4
5
6
SELECT DISTINCT SUBSTR(client.nom,1,1), client.age, adresse.ville, SUM(CLIENT.MNT)
FROM CLIENT, ADRESSE
WHERE CLIENT.CODE=ADRESSE.CODE
AND CLIENT.AGE < '40'
AND ADRESSE.DEP = '33'
GROUP BY client.nom, client.age, adresse.ville,CLIENT.MNT
et ça :
Code :
1
2
3
4
5
6
SELECT DISTINCT SUBSTR(client.nom,1,1), client.age, adresse.ville, CLIENT.MNT
FROM CLIENT, ADRESSE
WHERE CLIENT.CODE=ADRESSE.CODE
AND CLIENT.AGE < '40'
AND ADRESSE.DEP = '33'
GROUP BY client.nom, client.age, adresse.ville,CLIENT.MNT
?
davcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 02h39   #16
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
La premiere requete est la fonctionnalité reelle du group by, c'est a dire associé a une fonction d'aggregation (sum). Elle va faire la somme de tous tes clients.mnt en fonction de leur SUBSTR(client.nom,1,1), client.age, adresse.ville, un truc du genre

A 30 MaVille 40
A 30 MaVille2 165
...

La seconde requete te ramenera l'equivalent d'un select distinct.
A 30 MaVille 12
A 30 MaVille 28
A 30 MaVille2 143
...
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 12h56   #17
Membre Expert
 
Avatar de davcha
 
Inscription : avril 2004
Messages : 1 132
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 1 132
Points : 1 190
Points : 1 190
Je voulais que ça soit BiMouXeTTe qui réponde :p rooh làlà
davcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 13h20   #18
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
oups ! pardon
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2006, 13h58   #19
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Lol ca tombe bien j'avais la flème

Puis j'ai remarqué qu'en ce moment, niveau SGBD, j'dis pas mal de conneries...
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2006, 12h35   #20
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 19
Points : 12
Points : 12
Par défaut Fonction Group By

Bonjour,
sous unix ou linux ,

SELECT client.nom[1,1], client.age, adresse.ville, SUM(CLIENT.MNT)
FROM CLIENT, ADRESSE
WHERE CLIENT.CODE=ADRESSE.CODE
AND CLIENT.AGE < '40'
AND ADRESSE.DEP = '33'
GROUP BY 1,2,3
bernard69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h42.


 
 
 
 
Partenaires

Hébergement Web