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 :

Amélioration de requête statistique


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut Amélioration de requête statistique
    Hello.

    Donc, une fois n'est pas coutume, j'ai déjà la requête. Mais je ne la trouve pas propre, j'aimerai donc votre avis ainsi que vos solutions plus classes.

    J'ai une table qui contient notamment 3 champs : CategoryID, Date et Value.

    Je dois produire des statistiques dessus. Il me faut pour chaque categorie : La somme des valeurs, la valeur moyenne, la valeur max ET la date associée à cette valeur max.

    Voici ma requête pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT hd1.CategoryID AS CategoryID,
    	   SUM(hd1.Value) AS TotalValue, AVG(hd1.Value) AS AverageValue,
    	   MAX(hd2.Value) AS MaxValueValue, MAX(hd2.Date) AS MaxValueDate
      FROM HistoricalData hd1
      JOIN HistoricalData hd2 ON hd2.Value = (SELECT MAX(hd3.Value) FROM HistoricalData hd3 WHERE hd3.CategoryID = hd1.CategoryID)
     GROUP BY hd1.CategoryID
    Donc la liste des choses que j'aime pas dedans:
    - Le MAX(hd2.Value) et le MAX(hd2.Date) parce que ce n'est absolument pas un maximum parmi plusieurs valeurs, j'ai du faire un mauvais join.
    - La manière de récupérer la valeur maximale et sa date associée pour une catégorie définie.
    - Avoir 3x la même table dans la requête.

    Merci beaucoup de votre aide.

    Nuwanda

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par Nuwanda Voir le message
    Je dois produire des statistiques dessus. Il me faut pour chaque categorie : La somme des valeurs, la valeur moyenne, la valeur max ET la date associée à cette valeur max.
    Avant de s'attaquer à la requête, il y a déjà un pb dans la définition de ce que tu cherches : "la date associée..." : que fais-tu si la valeur maximale figure deux fois (ou plus), à des dates différentes ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par rsc Voir le message
    Avant de s'attaquer à la requête, il y a déjà un pb dans la définition de ce que tu cherches : "la date associée..." : que fais-tu si la valeur maximale figure deux fois (ou plus), à des dates différentes ?
    Merci pour ton aide!

    Je dirais que contenu de mes données c'est peu probable (ca peut arriver, mais peu probable) et j'ai besoin de l'une ou l'autre date peu importe.

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    En partant de la simple requête qui te donne tes trois 1ères données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CategoryID,
    	   SUM(Value) AS TotalValue, AVG(Value) AS AverageValue,
    	   MAX(Value) AS MaxValueValue
      FROM HistoricalData
     GROUP BY CategoryID
    et en la considérant comme une table T, voici sauf erreur ce que ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT T.CategoryID, T.AverageValue, T.MaxValueValue,
    MAX(HD.Date) AS MaxValueDate
    FROM
    (SELECT CategoryID,
    	   SUM(Value) AS TotalValue, AVG(Value) AS AverageValue,
    	   MAX(Value) AS MaxValueValue
      FROM HistoricalData
     GROUP BY CategoryID) T
    JOIN HistoricalData HD ON HD.CategoryID = T.CategoryID
    WHERE HD.Value = T.MaxValueValue
    GROUP BY T.CategoryID, T.AverageValue, T.MaxValueValue
    A essayer

Discussions similaires

  1. Créer une requête statistiques
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/01/2008, 22h47
  2. [MySQL] Amélioration performance requête
    Par lodan dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 15/01/2007, 09h06
  3. améliorer une requête
    Par papilou86 dans le forum Access
    Réponses: 5
    Dernier message: 22/05/2006, 11h40
  4. [Débutant] Requête statistique simple
    Par drthodt dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 14/10/2005, 09h50
  5. Requête statistique.
    Par abdelghani_k dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/08/2005, 19h39

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