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

Requêtes MySQL Discussion :

AVG et group by WEEK


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut AVG et group by WEEK
    Bonjour à tous,

    Soit une table dont chaque ligne est composée d'un id(clé primaire), id_produit, quantite et date (format datetime).

    Je voudrais savoir si il est possible d'obtenir la somme des quantités en moyenne par semaine pour un id_produit donné ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT SUM(quantite ) AS qte
    FROM table
    WHERE produit_id = '1239'
    GROUP BY WEEK(date_livraison)
    me retourne 2 2 2 1 1 1 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT AVG(quantite ) AS qte
    FROM table
    WHERE produit_id = '1239'
    GROUP BY WEEK(date_livraison)
    Me retourne 1.000 1.000 1.000 1.000 1.000 1.000 1.000

    Il y a 7 résultats, ce qui est logique puisque 7 semaines se sont écoulées depuis le 1er enregistrement.

    Mais la requête AVG n'est sûrement pas bonne.
    En fait je voudrais la moyenne des résultats de la 1ère (SUM) , c'est à dire :

    2 + 2 + 2 + 1 + 1 + 1 + 2 = 11 / 7 = 1.57
    Possible en 1 requête ou je dois passer par PHP ?
    Merci de vos lumières.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    En fait, la deuxième requête est pertinente, c'est juste que le type de la colonne quantité doit être INTEGER et qu'il faudrait caster le AVG en FLOAT, me semble-t-il.
    Ça ne te coûte rien d'essayer, en tout cas.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    C'est une sous-requête que tu veux faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select avg(qte)
      from (SELECT SUM(quantite ) AS qte
              FROM TABLE
             WHERE produit_id = '1239'
             GROUP BY WEEK(date_livraison)
            ) t

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci à vous.
    Et bien, en fait, skuatamad, ta requête le fait très bien.
    Bonne fin de journée.

  5. #5
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Argghh , non, j'ai chanté victoire trop tôt !

    Si j'ai, pour un produit, une seule ligne dans la table, par exemple 5 vendus en 1 fois semaine X, la requête me retourne...5

    La requête, je ne l'avais pas précisé, était déjà une requête jointe....peut-être ça, le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT avg(t.ventes) AS vente_semaine
      FROM (SELECT SUM(ca.quantite_liv) AS ventes
             FROM commandes_articles ca 
             LEFT JOIN commandes c ON ca.commande_id = c.id
             WHERE  ca.produit_id = '1239'
             GROUP BY WEEK(c.date_livraison)
            ) t
    Et moi, j'ai besoin, dans ce cas, que le résultat soit 5 / 7 semaines = 0.71
    Mais j'en demande peut-être trop ?

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Il te faut alors une requête, ou une vue, qui recense toutes les semaines (DISTINCT) de la table, requête (ou vue) que tu mets en jointure avec la requête que t'a proposé skuatamad.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci....mais peux-tu préciser ?

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Maljuna Kris, je crois que renaud26 ne veut qu'une seule ligne comme résultat, la moyenne du résultat de la requête avec la somme qui, elle, renvoie plusieurs lignes (7 dans l'exemple).

    Par contre ta proposition peut être intéressante pour calculer la somme car s'il n'y a pas de quantite pour une semaine donnée il est peut être nécessaire d'avoir un 0 pour la somme ce qui ferait baisser la moyenne.

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Maljuna Kris, je crois que renaud26 ne veut qu'une seule ligne comme résultat, la moyenne du résultat de la requête avec la somme qui, elle, renvoie plusieurs lignes (7 dans l'exemple).
    Voui,voui, je me suis rendu compte de ma méprise lors de mon avant-dernier post.
    Citation Envoyé par skuatamad Voir le message
    Par contre ta proposition peut être intéressante pour calculer la somme car s'il n'y a pas de quantite pour une semaine donnée il est peut être nécessaire d'avoir un 0 pour la somme ce qui ferait baisser la moyenne.
    C'est exactement cela.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT DISTINCT WEEK(date_livraison) AS semaine FROM commandes
    à mettre en table maîtresse puis LEFT JOIN de ta requête qui retourne la pseudo-table t.
    A propos, jusqu'à présent, on mélange les semaines de toutes les années, à moins qu'il n'y ait une table commandes par année.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  10. #10
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    en fait, tu dois rajouter une condition sur l'année pour éviter les erreurs liés aux années consécutives avec les mêmes numéros de semaines
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. [MySQL-5.6] Des statistiques avec mySQL (AVG et GROUP BY)
    Par boubil dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/02/2014, 10h23
  2. AVG par GROUP BY ne fonctionne pas
    Par axelar dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/02/2014, 13h47
  3. Group interval Week du lundi au dimanche
    Par fernan dans le forum BIRT
    Réponses: 5
    Dernier message: 21/06/2010, 10h58
  4. UPDATE et AVG(): invalid use of group function
    Par ctobini dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/02/2008, 12h12
  5. Group By Week(date)
    Par StanmaD dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/01/2007, 07h48

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