Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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/01/2012, 09h40   #1
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Par défaut Requête sql somme en fonction d'un id

Bonjour!
Alors voila, je galere sur une requete sql, j ai testé beaucoup de choses,mais rien de concluant, je m en tire les cheveux!
la requete suivante me renvoi toutes les lignes de ma base avec le prix multiplié par le pourcentage, le truc, c est que j aurai voulu additioner ces lignes en fonction de l id prestation..
j ai essayé avec sum et group by, mais là, du coup ca me fais une somme globale par rapport a l identifiant sans tenir compte qu'il y a des pourcentages différents par prestation..
suis un peu paumé... :

Code :
1
2
3
4
5
6
7
8
9
SELECT prestations.id_prestation, (
facture_inclure_prestations.prix * ( factures.percent /100 )
) AS prix
FROM facture_inclure_prestations
INNER JOIN prestations ON facture_inclure_prestations.id_prestation = prestations.id_prestation
INNER JOIN factures ON factures.id_facture = facture_inclure_prestations.id_facture
WHERE factures.date_modification >= '2010-07-01'
AND factures.date_modification < '2011-07-01'
ORDER BY id_prestation
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h44   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
bonjour,

décrivez correctement votre existant (voir les règle du forum) et en particulier ceci :
Citation:
j ai essayé avec sum et group by, mais là, du coup ca me fais une somme globale par rapport a l identifiant sans tenir compte qu'il y a des pourcentages différents par prestation..
Car là nous aussi on est un peu pommé !
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h46   #3
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,

Pense à utiliser les balises pour tes requêtes. Il faudrait aussi préciser la structure des tables et ton SGBD.

Citation:
la requete suivante me renvoi toutes les lignes de ma base avec le prix multiplié par le pourcentage, le truc, c est que j aurai voulu additioner ces lignes en fonction de l id prestation..
j ai essayé avec sum et group by, mais là, du coup ca me fais une somme globale par rapport a l identifiant sans tenir compte qu'il y a des pourcentages différents par prestation..
Tu pourrais nous donner un jeu de données avec une exemple de ce que tu attend en retour ? Car pour moi ici ces deux phrases veulent dire la même chose. Qu'entend tu par "sans tenir compte qu'il y a des pourcentages différents par prestation" ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h09   #4
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
suis sous mysql
quand je dis sans tenir compte du percent, c est que quand je fais un group by, ca me calcule la somme en me prenant un percent au hasard alors qu ils sont presques tous différents..

j ai donc une table factures avec des id_facture et percent
une table facture_inclure_presta avec id_facture,id_prestation, prix et date creation
et la table prestation avec les caracteristiques de celle ci..
je vois pas trop comment mieux expliquer..
je veux arriver a avoir la somme du produit du 'percent' * 'prix' , mais avec le group by, ca ne me prend pas le bon percent...
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h21   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Est-ce que la requête ci-dessous répond à ton besoin ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT tmp.id_prestation, SUM(tmp.prix) AS total
FROM
(
	SELECT p.id_prestation, 
	(fip.prix * ( f.percent /100 )) AS prix
	FROM facture_inclure_prestations fip
	INNER JOIN prestations p ON fip.id_prestation = p.id_prestation
	INNER JOIN factures f ON f.id_facture = fip.id_facture
	WHERE f.date_modification >= '2010-07-01'
		AND f.date_modification < '2011-07-01'
) tmp
GROUP BY tmp.id_prestation
ORDER BY tmp.id_prestation
Au passage, note qu'avec l'emploi des alias, la requête est plus agréable à lire !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h22   #6
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Un exemple concret ?

Par exemple jeu de donnée :
Code :
1
2
3
4
id | prix | percent
1  | 10   | 20
1  | 5   | 50
2  | 10  | 30
Ta requête nous donne :
Code :
1
2
3
4
id | prix
1  | 2
1  | 2,5
2  | 3
Résultat attendu :
Code :
1
2
3
id | somme
1  | 4,5
2  | 3
Est-ce que c'est ça ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h28   #7
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
oui, c est ca lola.
pour les alias, c est clair que c est plus lisible!
mais c est exactement ce que je vous disai, ca me renvoi pas le resultat attendu,l exemple de lola correspond a ce que j ai et cherche, mais la requete me renverrai
  1. 1 - 2
  2. 2 - 3

et ce que j attend c est bien la somme du produit comme dans ton exemple lola oui
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h32   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par babal Voir le message
mais la requete me renverrai
  1. 1 - 2
  2. 2 - 3

et ce que j attend c est bien la somme du produit comme dans ton exemple lola oui
De quelle requête parles-tu ?
Ma requête renvoie bien la somme des produits par id_prestation non ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h36   #9
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
non, ca renvoi comme l exemple de base vous disai si j y rajoute un SUM et group by.
le truc c est que ca me prend pas toutes les bonnes valeurs de percent là..

La sous requete est bonne, ca me renvoi bien les bons chiffres, c est ca que je comprends pas!
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h42   #10
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Peux-tu nous montrer ta requête avec le sum/group by.
Je ne vois pas pourquoi elle ne marche pas... Normalement c'est la bonne façon de faire..
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h46   #11
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Et bien,je me dis la meme chose, c est pas normal,la requete a cinephil me parai bien faite, vu que la sous requete quand je fais les additions des sommes ca me donne le bon chiffre!
mais la requete globale non..

à la base, j avai fais ca:
Code :
1
2
3
4
5
6
7
8
9
10
SELECT prestations.nom, prestations.id_prestation, facture_inclure_prestations.id_prestation, SUM( facture_inclure_prestations.prix * factures.percent /100 ) AS prix
FROM  prestations INNER JOIN facture_inclure_prestations ON facture_inclure_prestations.id_prestation = prestations.id_prestation
INNER JOIN factures ON factures.id_facture = facture_inclure_prestations.id_facture
WHERE (
devis.etat LIKE 'termine'
OR devis.etat LIKE 'contractuel'
)
AND factures.date_modification >= '2010-07-01'
AND factures.date_modification < '2011-07-01'
GROUP BY prestations.nom, prestations.id_prestation, facture_inclure_prestations.id_prestation
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h55   #12
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Et tu as essayé celle de CinePhil ? Telle quelle ?
Car normalement elle est bonne.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h00   #13
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Ben oui! telle quelle!
c est bien ce que je vous dis.. je comprends pas, elle me parai parfaite pourtant!
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h17   #14
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Que renvoie :

Code :
1
2
3
4
5
6
7
SELECT p.id_prestation, 
    (fip.prix * ( f.percent /100 )) AS prix
    FROM facture_inclure_prestations fip
    INNER JOIN prestations p ON fip.id_prestation = p.id_prestation
    INNER JOIN factures f ON f.id_facture = fip.id_facture
    WHERE f.date_modification >= '2010-07-01'
        AND f.date_modification < '2011-07-01'
Avec un exemple concret s'il te plait.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h22   #15
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Ça me renvoie bien tous les produits!
  1. 2 - 490
  2. 2 - 100
  3. 2 -594
  4. 2 - 490 ...
quand je les additionne, ça me donne le bon chiffre, 532000...
mais quand je fais l'autre requête
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT tmp.id_prestation, tmp.nom, SUM( tmp.prix ) AS total
FROM (
 
SELECT p.id_prestation, p.nom, (
fip.prix * ( f.percent /100 )
) AS prix
FROM facture_inclure_prestations fip
INNER JOIN prestations p ON fip.id_prestation = p.id_prestation
INNER JOIN factures f ON f.id_facture = fip.id_facture
WHERE f.date_modification >= '2010-07-01'
AND f.date_modification < '2011-07-01'
)tmp
GROUP BY tmp.id_prestation
ORDER BY tmp.id_prestation
Là ça me tronque quelque part, le résultat des sommes me donne 408000....
c est ça que je ne comprend pas, pourtant vu que le produit est calculé à l'intérieur de la fonction imbriquée, il n y a pas de raison, du moins, je vois pas du tout ou ça cloche, mais ça cloche
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h28   #16
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,

Tu as ajouté p.nom dans ta sous-requête et requête sans le mettre dans ton GROUP BY.

Corrige déjà ça.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h32   #17
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Je l'ai rajouté après avoir testé, ça change rien !
babal est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/01/2012, 13h38   #18
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Citation:
Envoyé par babal Voir le message
Je l'ai rajouté après avoir testé, ça change rien !
Ce que vous dites est incohérent et comme dans le 1er poste toujours aussi bordélique.

Comment voullez-vous que les gens vous aide ?

Bref, pour la prestation 2, avec la requête de Cinephil, votre sommes est plus grande ou plus petite que 532000 ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 14h04   #19
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : -1
Points : -1
Incohérent, je trouve pas.. Bordélique, j avoue que je le suis!
La somme est plus petite comme dis le précedent post :408000..
babal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h11   #20
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Citation:
Envoyé par babal Voir le message
Ça me renvoie bien tous les produits!
  1. 2 - 490
  2. 2 - 100
  3. 2 -594
  4. 2 - 490 ...
quand je les additionne, ça me donne le bon chiffre, 532000...
Cf ceci, vous dites qu'en additionnement manuellement le retour de la requête de lola vous obtenez le bon résultat.

C'est ce que fait la requête de Cinephil.

Donc si la requête de Cinephil ne renvoie pas le bon résutlat c'est qu'il y a une incohérence :
- dans vottre addition manuelle
- l'interprétation des résultats de la requête de lola.

Je part du postulat que la requête de lola est bonne.

Est-ce qu'un prix ou un pourcentage peut-être négatif (je penses particulièrelent aux avoir qui sont facturable) ? Si, non, l'avez-vous vérifié ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 30
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h10.


 
 
 
 
Partenaires

Hébergement Web