Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/01/2013, 08h46   #1
xanthos
 
Inscription : février 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 24
Points : -3
Points : -3
Par défaut Imbriquer des requetes

bonjour
comment faire pour imbriquer des requêtes?
j'ai bien suivi quelques tutos différents, mais je n'arrive pas à ce que je veut...

j'ai une première base avec des colonnes :
rap_res -> uid - livraison - total - date
et une seconde
x_world -> uid - pays - ville

je voudrais calculer la somme des livraisons totales et le nombre de ville
donc pour la première somme je fais :
Code :
SELECT SUM(total) AS total FROM rap_res GROUP BY uid
et pour mon second besoin
Code :
SELECT COUNT(*) FROM x_world GROUP BY uid
j'ai bien moins de ligne sur la table rap_res que sur x_world, don je ne voudrais calculer que en fonction de la première table et obtenir par ligne
uid - SUM(total) - COUNT(*)
1 - 10000 - 2
2 - 526548 - 5
12 - 2356 - 19
etc...

merci d'avance pour votre aide
xanthos
xanthos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h20   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 672
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 672
Points : 25 526
Points : 25 526
Envoyer un message via MSN à CinePhil
Code :
1
2
3
4
5
6
SELECT x.uid,
	COUNT(DISTINCT x.ville) AS nb_villes,
	COUNT(DISTINCT r.livraison) AS nb_livraison
FROM x_world x
LEFT OUTER JOIN rap_res r ON r.uid = x.uid
GROUP BY x.uid
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 13h27   #3
xanthos
 
Inscription : février 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 24
Points : -3
Points : -3
merci ca fonctionne
en fait je le faisais dans l'autre sens .... depuis la table rap_res
par contre ce n'est pas le nombre de livraison que je veut mais bien la somme donc :
Code :
1
2
3
4
5
6
7
SELECT x_world.uid, x_world.nom, 
COUNT( DISTINCT x_world.vid ) AS nb_villes, 
SUM( DISTINCT rap_res.cereales ) AS nb_cereales
FROM x_world
JOIN rap_res ON rap_res.uid = x_world.uid
GROUP BY x_world.uid
ORDER BY `x_world`.`uid` ASC
xanthos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 17h42   #4
xanthos
 
Inscription : février 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 24
Points : -3
Points : -3
sauf que du coup je me suis aperçu que ca ne fonctionne pas...
cela me prends la somme de mes livraisons et que ca me les multiplie par le nb de villes
exemple si j'ai un vendeur qui a 5 villes et qui vends pour 20.000€ dans 4 villes, le résultat me donne (20.000*4*5) soit 400.000
je vais contourner en divisant le résultat, mais c'est pas net comme solution non?
xanthos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 08h47   #5
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 672
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 672
Points : 25 526
Points : 25 526
Envoyer un message via MSN à CinePhil
C'est parce que SUM n'a pas de DISTINCT. Bizarre d'ailleurs que MySQL accepte cette syntaxe mais plus rien ne m'étonne de la part du mauvais MySQL !

Essaie comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT x.uid, x.nom,
	COUNT(x.vid ) AS nb_villes,
	r.somme_cereales
FROM x_world x
INNER JOIN
(
	SELECT uid,
		SUM(cereales) AS somme_cereales
	FROM rap_res
	GROUP BY uid
) r ON r.uid = x.uid
GROUP BY x_world.uid, x_world.nom, r.somme_cereales
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2013, 17h17   #6
xanthos
 
Inscription : février 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 24
Points : -3
Points : -3
impeccable, j'ai juste rajouté une division (la fin du fin de ce que je voulais)

la requete finale qui fonctionne est donc :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT x_world.uid, x_world.nom,
	COUNT(x_world.vid ) AS nb_villes,
	somme_cereales,
	(somme_cereales/(COUNT(x_world.vid ))) AS rapport
FROM x_world
INNER JOIN
	(
		SELECT rap_res.uid,
			SUM(rap_res.cereales) AS somme_cereales
		FROM rap_res
		GROUP BY rap_res.uid
	) AS toto ---------------------> il faut un alias obligatoirement
	ON toto.uid = x_world.uid
GROUP BY x_world.nom
ORDER BY rapport DESC
merki beaucoup
xanthos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 17h57   #7
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
Citation:
Envoyé par CinePhil Voir le message
C'est parce que SUM n'a pas de DISTINCT. Bizarre d'ailleurs que MySQL accepte cette syntaxe mais plus rien ne m'étonne de la part du mauvais MySQL !
Extrait de la doc :
Citation:
SUM([DISTINCT] expr)
Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used to sum only the distinct values of expr.
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2013, 00h12   #8
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 672
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 672
Points : 25 526
Points : 25 526
Envoyer un message via MSN à CinePhil
Au temps pour moi !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h50.


 
 
 
 
Partenaires

Hébergement Web