Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 18/07/2011, 01h30   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 63
Points : 9
Points : 9
Par défaut requete imbriquee (subqueries)

salut
pouvez vous m'aider a trouver l'erreur dans cette syntaxe(je chercher le maximum d'un somme des quantites d'un client donne)

Code :
1
2
3
4
5
6
7
SELECT MAX(
SELECT SUM( quantite )
FROM lignescommande a, commande b, client c
WHERE a.id_cmd = b.id_cmd
AND b.id_cl = c.id_cl )
FROM lignescommande a, commande b, client c
WHERE a.id_cmd = b.id_cmd

merci beaucoup
salyiohh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 02h04   #2
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
Questions :
1- Tu veux avoir le client qui a le plus commander de produits en terme de quantité?
ou bien
2- Pour un client donné, Tu voudrais savoir quelle est la plus grande quantité de produits qu'il a commandé?
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 20h46   #3
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
On ne peut pas faire MAX d'un SELECT, il faut faire MAX d'un champ.
Ta requête pourrait peut-être s'écrire:
Code :
SELECT max(m) FROM (select sum(qte) AS m FROM .... WHERE ....) AS s
Il y a un point obscur dans ton explication c'est le "client donné", car ta requête ne fait pas référence à un client donné mais à tous les clients.
Peut-être qu'il manque un GROUP BY client si c'est "pour chaque client".
Sinon autant faire directement
Code :
SELECT max(sum(qte)) FROM ...
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 23h47   #4
Invité régulier
 
Inscription : janvier 2011
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 63
Points : 9
Points : 9
fab256

1- Tu veux avoir le client qui a le plus commander de produits en terme de quantité?
oui..avec le nom de client

estofilo
j ai essaye les deux requetes ,le probleme reseste...
salyiohh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 01h02   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Code :
1
2
3
4
5
6
7
8
9
SELECT MAX(SOMME), client
FROM 
(
  SELECT SUM(quantite) as SOMME ,client,annee
  FROM table
  GROUP BY client, annee
) as tmp
WHERE client LIKE 'c%'
GROUP BY client
Si tu veux avoir un agregat d'agregat faut procéder comme ça ...
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 01h06   #6
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
si tu veux un classement de tes clients fait plutot
Code :
1
2
3
4
5
6
7
 
SELECT SUM(quantite),client
FROM table
WHERE produit LIKE 'p%'
GROUP BY client
ORDER BY SUM(quantite)
LIMITS 1
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 01h30   #7
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
Je pense que ta requete pourrais s'écrire de cette facon
Code :
1
2
3
4
5
6
7
SELECT SUM(b.quantite) AS SommeQtt, c.nom_cl
commande a
INNER JOIN lignescommande b ON (a.id_cmd = b.id_cmd)
INNER JOIN client c ON (a.id_cl = c.id_cl)
GROUP BY c.nom_cl
ORDER BY SommeQtt
LIMITS 1
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 00h45   #8
Invité régulier
 
Inscription : janvier 2011
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 63
Points : 9
Points : 9
Par défaut 50 pour cent est faite

salut tout le monde
je viens de réaliser 50 pour cent du travail
la requête est :

Code :
1
2
3
4
5
6
7
8
9
SELECT MAX( SOMME )
FROM (
 
SELECT SUM( quantite ) AS SOMME
FROM lignescommande a, commande b, client c
WHERE a.id_cmd = b.id_cmd
AND b.id_cl = c.id_cl
GROUP BY c.nom
) AS temp
il m'affiche le MAXIMUM des articles commande par un client ,le problème c'est que je veux qu il soit accompagne d nom de ce client(l'atribut nom qui existe dans la table client)
alors ici j me sens un petit peu perdu, avez vous des propositions .svp
merci
salyiohh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h02.


 
 
 
 
Partenaires

Hébergement Web