IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête sql somme en fonction d'un id


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    décrivez correctement votre existant (voir les règle du forum) et en particulier ceci :
    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é !

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

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

    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" ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    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...

  5. #5
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Est-ce que la requête ci-dessous répond à ton besoin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Un exemple concret ?

    Par exemple jeu de donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id | prix | percent
    1  | 10   | 20
    1  | 5   | 50
    2  | 10  | 30
    Ta requête nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id | prix
    1  | 2
    1  | 2,5
    2  | 3
    Résultat attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id | somme
    1  | 4,5
    2  | 3
    Est-ce que c'est ça ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    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

  8. #8
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    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 ?

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    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!

  10. #10
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    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..

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Et tu as essayé celle de CinePhil ? Telle quelle ?
    Car normalement elle est bonne.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    Ben oui! telle quelle!
    c est bien ce que je vous dis.. je comprends pas, elle me parai parfaite pourtant!

  14. #14
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Que renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    Ç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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    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.

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    Je l'ai rajouté après avoir testé, ça change rien !

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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 ?

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Android / Web
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Android / Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Points : 0
    Points
    0
    Par défaut
    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..

  20. #20
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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é ?

Discussions similaires

  1. Requête SQL : lieux en fonction des Stés
    Par awa123 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 02/11/2012, 13h17
  2. [PHP 5.0] Exécuter une requête SQL dans une fonction Javascript
    Par PrinceMaster77 dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2011, 05h53
  3. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 14h37
  4. [Requête SQL] Somme cumulée
    Par Mil17 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/08/2007, 16h31
  5. [Requête SQL][ACCESS 2003] - Fonction TOP, DISTINCT
    Par guiguikawa dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 20/06/2006, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo