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 et SQL. Discussion :

La moyenne des plus grandes valeurs d'un champ


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut La moyenne des plus grandes valeurs d'un champ
    Bonjour,

    Danss une BDD Access, j'ai la table suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    -- Structure de la table `test_trafic`
    --
     
    CREATE TABLE IF NOT EXISTS `test_trafic` (
      `Site` varchar(11) NOT NULL,
      `WEEKOF` varchar(15) NOT NULL,
      `ventes` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `test_trafic`
    --
     
    INSERT INTO `test_trafic` (`Site`, `WEEKOF`, `ventes`) VALUES
    ('10001', '02/06/2008', 6000),
    ('10001', '09/06/2008', 6063),
    ('10001', '16/06/2008', 6070),
    ('10001', '29/12/2008', 3693),
    ('10002', '02/06/2008', 2904),
    ('10002', '09/06/2008', 3010),
    ('10002', '16/06/2008', 2991),
    ('10003', '02/06/2008', 3747),
    ('10003', '09/06/2008', 3782),
    ('10003', '16/06/2008', 3699),
    ('10003', '23/06/2008', 3766),
    ('10003', '30/06/2008', 3834),
    ('10003', '07/07/2008', 3327),
    ('10004', '02/06/2008', 3680),
    ('10004', '09/06/2008', 3737),
    ('10004', '16/06/2008', 3709),
    ('10004', '23/06/2008', 3565),
    ('10004', '30/06/2008', 3486),
    ('10004', '07/07/2008', 2925),
    J'aimerais prendre la moyenne "ventes" pour les 2 semaines ou les valeurs sont le plus élevées. J'explique par un exemple:

    Pour 10001 le résultat serait: (6063 + 6070)/2
    Pour 10002 le résultat serait: (3010 + 2991)/2
    Pour 10003 le résultat serait: (3834 + 3782)/2

    Merci de votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Salut,

    Je pense qu'en faisant une sous requete avec un order by sur ton champ et un TOP, ca devrait le faire...
    Genre ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select T1.Site, Sum(T1.ventes)/2
    FROM test_trafic T1
    WHERE T1.WEEKOF IN
             (Select TOP 2 T.WEEKOF, T.ventes 
              FROM test_trafic T
              WHERE T1.Site = T.Site
              ORDER BY T.ventes desc)
    GROUP BY T1.Site
    Tu en penses quoi ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut
    je viens de tester ta requête mais j'ai l'erreur suivante:

    Vous avez écrit une sous-requête pouvant renvoyer plus d'un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête principale. réviser l'instruction SELECT de la sous requête pour obtenir un seul champ.

    c'est peut être parce que la sous requête retourne plusieurs résultats...??

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Nan, le soucis, c'est que dans la sous-requête, je renvois 2 champs, alors qu'il n'en attend qu'un seul...
    Donc il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select T1.Site, Sum(T1.ventes)/2
    FROM test_trafic T1
    WHERE T1.WEEKOF IN
             (Select TOP 2 T.WEEKOF
              FROM test_trafic T
              WHERE T1.Site = T.Site
              ORDER BY T.ventes desc)
    GROUP BY T1.Site
    Dans la sous-requête, c'est sur le champ ventes que l'order by va se faire, pas besoin qu'il soit dans le select...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup ça marche nickel, sauf que j'essaye de comprendre l'algorithme mais je ne capte pas grand chose...

    J'ajoute le tag "Résolu"! Merci.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Ben en fait, c'est pas très compliqué...
    Dans ta sous requête, on classe les semaines par ordre décroissant de vente et on prend les 2 premières (TOP 2) pour le site en cours de selection dans la requête au dessus...
    Du coup, tu connais pour ton site, les 2 meilleures semaines, il ne te reste plus qu'à les sommer...

    J'espère que c'est plus clair

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Selection de n plus grandes valeurs avec 2 champs
    Par benoguiz dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 26/03/2015, 17h21
  2. [AC-2010] Récupérer l'avant dernière plus grande valeur d'un champ
    Par shakapouet dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/07/2012, 14h20
  3. Calculs des plus grandes valeurs propres
    Par Swaraj dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 27/06/2011, 10h04
  4. Réponses: 3
    Dernier message: 04/01/2011, 15h05
  5. VBA_E : Selection des 5 plus grandes valeurs d'une colonne..
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/09/2006, 17h39

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