[SQL] comment calculer un total ?

Résolu
Bonjour à tous,

voilà jusqu'ici j'utilisais la requête suivante en SQL :

SELECT ProductName, SUM(Quantity) AS TOTAL
FROM DeliveryDtls
WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0) AND (Quality LIKE 'S')
GROUP BY ProductName

ProductName étant une colonne ainsi que Qality. Dans la table Quality j'ai 5 option dont 'S'.

Cette requête me permet d'avoir le total de mes produits de la table pour la journée. Chaque ligne représentant un produit.

Moi je voulais savoir s'il était possible d'avoir une seule ligne au lieu de plusieurs et donc un total.

Pour exemple :

le jour cité ma requête donne comme résultat :

ProductName I TOTAL
produit1 : 5
produit2 : 15
produit3 : 20
produit4 : 100
produit5 : 5
...

moi je voudrais que le résultat de ma requête soit :
Totalproduits : 145 par exemple

J'ai un bouquin mais dedans ils expliquent comment faire une moyenne mais pas comment faire un total d'une table...

si quelqu'un a la réponse je l'en remercie d'avance...

--
Cordialement,
Riwalenn

30 réponses

Résumé de la discussion

L’objectif est d’obtenir un total unique des quantités pour une journée en SQL à partir de DeliveryDtls, en utilisant SUM(Quantity) et un filtre sur CreateDate et Quality. La problématique initiale est de passer d’un affichage par produit (GROUP BY ProductName) à une seule ligne récapitulative comme Totalproduits, par exemple pour une date donnée. Plusieurs réponses suggèrent de supprimer ProductName ou le GROUP BY et d’employer SUM(Quantity) avec les conditions sur la date et Quality, tout en soulevant des questions de formatage de date. Des échanges ultérieurs évoquent également la possibilité d’étendre la requête à une période plus longue, comme une semaine, en utilisant des plages de dates et des opérateurs appropriés sans refaire la logique du groupement.

Bobot (l’IA à votre service)
  1. Et si tu enleve le "productName" ?
    SELECT SUM(Quantity) AS TOTAL
    FROM DeliveryDtls
    WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0) AND (Quality LIKE 'S')
    1. Et si tu enleve le "group by" ?
      1. Exact! si tu veux une somme totale, tu ne peux pas faire une somme par groupe, donc sans group by!
    2. Si j'enlève Group By ma requête ne fonctionne pas et si je mets à la place order by c'est pareil...
      1. Very Good Gally !!! effectivement ça me donne le total de la journée...

        merci !!!

        je voulais savoir dans la foulée si quelqu'un sait si on peut faire sur une période.. mon code est actuellement faire sur la journée. Est-il possible de le faire sur une semaine ?

        1. Oui, tu n'as qu'a introduire dans ta SELECT, WHERE et BETWEEN le semaine convertie en nb. de jours (7!).
      2. Je dois avouer que ce n'est pas très clair pour moi ce que tu dis...
        1. Syntaxe:

          SELECT champ 
          FROM matable 
          WHERE condition BETWEEN  '2005-01-01' AND '2005-12-31'


          tout depend de ton format de date dans ta base aussi
          1. Je crois que j'ai toujours pas saisi la requête que vous m'expliquez...
            j'ai essayé ça :
            SELECT SUM(Quantity) AS TOTAL
            FROM DeliveryDtls
            WHERE (Quality like 'S') BETWEEN '11/02/2005' AND '11/07/2005'

            à priori c'est pas ça

            le probleme c'est que ma date est du genre 28/07/2005 18:44:
            et quand je fais une requête je dois mettre la date à l'envers, ça fonctionne pas si je mets '07/28/2005%'
            1. SELECT SUM(Quantity) AS TotalQuantity
              FROM DeliveryDtls
              WHERE ......

              risquer d'utiliser TOTAL comme nom du champ du total.....
          2. SELECT SUM(Quantity) AS TOTAL
            FROM DeliveryDtls
            WHERE Quality like 'S' AND (ta_date_a_toi BETWEEN '11/02/2005' AND '11/07/2005') 


            c'est dd le nom de ta date ?

            comme je l'ai dit aussi:
            tout depend de ton format de date dans ta base aussi

            regarde un peu du coté des timestamp pour tes problemes de format de date
            1. Comment tu enregistre ta date dans ta base ?
              Avec un champ date, datetime, timestamp ou un simple varchar ?
              1. Petite question:
                comment ca ce fait que ca marche ca :
                DATEDIFF(dd, CreateDate, '11/02/2005') 

                parce que datediff ne prend que 2 parametre, et '11/02/2005' n'estpas comprit pas mysql. Et a quoi correspond CreateDate ?
                1. Bon, je part, si demande tu as pas ta réponse, je continurai a chercher. ;-)
                  1. DateCreate correspond à la date de création de la ligne. On utilise un logiciel externe dans lequel on entre des données et chaque données est entrée dans la base de données SQL. Chaque produit que l'on entre dans ce logiciel correspond à une ligne dans la bdd.
                    C'est un peu fouilli mes explications.

                    datediff je l'écris comme ça dans ma requête :
                    WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0)

                    il faut que je signale que j'utilise une version anglaise de windows
                    1. Justement je comprend comment tu utilise le datediff parce qu'il ne doit prend en compte que les deux premier parametre, autrement dit ca doit etre la même chose que :
                      WHERE (DATEDIFF(dd, CreateDate) = 0) 
                      1. non je ne crois pas que ce soit la même chose... moi pour le datediff il me demande 3 arguments.
                        j'ai le message suivant si je mets la requete que m'as dit :

                        SELECT ProductName, SUM(Quantity) AS TOTAL
                        FROM DeliveryDtls
                        WHERE (DATEDIFF(dd, CreateDate) = 0) AND (Quality LIKE 'S')
                        GROUP BY ProductName


                        [Microsoft][ODBC SQL Server Driver][SQL Server]The datediff function requires 3 arguments.

                        1. J'en ai aucune idée, on m'avait filé le code sur ce forum pour pouvoir avoir une requête sur une journée donnée vu que le % ne fonctionne pas chez moi...
                          et le dd n'est pas expliqué sur mon bouquin, il n'existe même pas :P
                          1. Je vous remercie pour votre aide et pour les solutions apportées à mon problème...
                            ;)
                            1. Ola, d'ailleur j'était tellement pris par mon travail que j'ai pas reposté depuis un moment.
                              Ta trouver une solution ou ta toujours un probleme ?
                              1. bonjour,

                                dans datediff ou aussi dateadd, le format est le suivant :

                                datediff('d', date1, date2) avec d pour une difference en jours, m pour une difference en mois, etc... en fait ce parametre permet de déterminé l'unité de mesure de la différence : seconde, minute, heure, jour, semaine, mois, annee.

                                et voila...
                            2. non non c'est bon je me suis débrouillée avec le total à la jour grâce au code que tu m'a fourni... ça m'a pris 5mn, heureusement pour moi on avait juste 3 mois de statistiques donc ça a été rapide...
                              merci
                              • 1
                              • 2