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 :

Requête qui renvoie les valeurs les plus souvent affichés


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut Requête qui renvoie les valeurs les plus souvent affichés
    Bonjour, j'essaie de créer une requête qui me permettrait de calculer le prix moyen de mes produits (chose pas trop compliqué jusqu'à maintenant si vous êtes d'accord avec moi) ainsi que 3 autres colonnes qui m'indiqueraient la valeur la plus souvent affichée, la 2ème valeur la plus affichée et la 3è valeur la plus affichée. En fait, en jargon mathématique, je veux trouver les 3 Modes pour chaque produit.

    Quelqu'un connaîtrait-il un moyen qui me permettrait de faire ceci?

    Merci encore!

    Cordialement,

  2. #2
    Membre actif Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Points : 228
    Points
    228
    Par défaut
    Citation Envoyé par athos7776
    ainsi que 3 autres colonnes qui m'indiqueraient la valeur la plus souvent affichée, la 2ème valeur la plus affichée et la 3è valeur la plus affichée. En fait, en jargon mathématique, je veux trouver les 3 Modes pour chaque produit.
    je crois qu'il faut être plus explicite que ça , en donant la structure de ta table et la nature des 3 autres colonnes et leurs indicateurs d'affichage.



  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Effectivement, tu as raison. J'étais un peu trop empressé étourdi que je suis .

    Voilà, j'ai une table du nom fictif Table1, avec pour champs :
    -DescFormat
    -DescMarq
    -DepOuEpic
    -PrixReg

    Je me suis créé une requête Sélection qui me permet de filtrer et regrouper mes données par "DescFormat", "DescMarq", "DepOuEpic" (Avec pour Critère "D" dans ma colonne "DepOuEpic"). Ensuite, la 4ème colonne ("PrixReg") me calcule la moyenne des prix selon mon regroupement. Finalement, j'ai une dernière colonne qui me calcule le nombre de fois que ce prix moyen est affiché dans ma table.

    Voici mon code SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Table1.DescFormat, Table1.DescMarq, Table1.DepOuEpic, Avg(Table1.PrixReg) AS MoyenneDePrixReg, Count(Table1.PrixReg) AS CompteDePrixReg
    FROM Table1
    GROUP BY Table1.DescFormat, Table1.DescMarq, Table1.DepOuEpic
    Having (((Table1.DepOuEpic)="D"));
    Je voudrais pouvoir (dans la même requête ou une différente) afficher les 3 valeurs les plus populaires, avec le même canevas de base avec pour colonnes celles-ci dans l'ordre : "DescFormat", "DescMarq", "DepOuEpic" avec Critère="D", "Prix le plus souvent affiché", "Prix le 2e fois le plus affiché", "Prix le 3e fois le plus affiché".

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu une colonne qui compte le nombre de fois qu'un produit a été appelé ? Peux-tu nous décrire en détail le libellé de tes colonnes, et ce q'il y'a dedans.

    Starec

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Oui, j'ai une colonne qui compte le nombre de fois que le prix a été affiché.

    Pour mes colonnes, c'est assez simple (quand je parle de Produit, il s'agit du regroupement du Format et de la Marque, comme s'ils ne faisaient plus qu'un) :

    -1ère colonne : elle m'indique les FORMATS pour chaque produit
    -2ème colonne : elle m'indique les MARQUES pour chaque produit
    -3ème colonne : elle m'indique la moyenne du PRIX pour chaque produit
    -4ème colonne : elle m'indique le nombre de fois que la moyenne du prix est apparue
    -5ème colonne : elle m'indique la valeur qui a été la plus souvent répétée par produit
    -6eme colonne : le nombre de fois qu'elle est apparue
    -7ème colonne : elle m'indique la 2ème valeur qui a été la plus souvent répétée par produit
    8ème colonne : le nombre de fois qu'elle est apparue
    -9ème colonne : la 3ème valeur la plus souvent répétée
    10ème colonne : le nombre de fois qu'elle est apparue

    Voici un petit exemple en fichier attaché qui donnerait une meilleure idée de ce que je souhaiterais que ça donne

    Je ne sais pas si c'est ça que vous vouliez savoir, sinon j'essaierai d'expliquer ce que je souhaite d'une autre façon. Merci encore

  6. #6
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Scusé, l'image est vraiment de piètre qualité ! Voici un meilleur example.
    Images attachées Images attachées  

  7. #7
    Membre actif Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Points : 228
    Points
    228
    Par défaut
    Ok , je crois comprendre ton besoin . (ta règle c'est que pour chaque produit il y a plusieurs prix)

    a côté de ton groupement que tu as déjà effectué , tu affiche la moyenne des prix , affiche le Max() ainsi tu auras la valeur la plus grande du nombre de fois d'affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Table1.DescFormat, Table1.DescMarq, Table1.DepOuEpic, Avg(Table1.PrixReg) AS MoyenneDePrixReg, Count(Table1.PrixReg) AS CompteDePrixReg , MAX(Table1.col1) as [Nombre de fois affiché 1]  
    ,MAX(Table1.col2) as [Nombre de fois affiché 2] ,MAX(Table1.col3) as [Nombre de fois affiché 3] 
    FROM Table1
    GROUP BY Table1.DescFormat, Table1.DescMarq, Table1.DepOuEpic
    HAVING (((Table1.DepOuEpic)="D"));

    Voilà

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Hum....je viens d'essayer le code que tu viens de me donner et ça me fonctionne pas. En fait, c'est certain que ça fonctionne pour la moyenne et son nombre de fois, mais ce que je souhaite savoir c'est pour connaître les 3 prix les plus souvent répertoriés pour chaque produit. De plus,le fichier que j'ai attaché ce n'est pas ma table, c'est le résultat que j'aimerais que me renvoie une requête.

    Mais bon, jusqu'à maintenant en essayant Max sur le nombre de fois que le prix a été répertorié, ceci fonctionne partiellement. J'ai bel et bien le nombre de fois maximum pour chaque produit, mais au moment où j'ajoute la case prix à côté, au lieu de me donner le prix qui est relié au nombre de fois maximum on dirait qu'il oublie que j'ai mis MAX auparavant, comme s'il n'en tenait plus compte.

    J'espère que quelqu'un a une idée parce que je désespère de plus en plus...

  9. #9
    Membre actif Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Points : 228
    Points
    228
    Par défaut
    OK , la je comprends mieux ,sur ta structure tu n'as qu'une seule colonne qui contien le nombre de fois qu'un produit a été affiché.

    je crois que la réponse à ta requête est une sélection qui comportera les 3 premiers éléments (je dis bien en sélection pas en projection)

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Produit  |  Nombre de fois affiché 
    P1        |   13
    P1        |   12
    P1        |   11
    sinon il y'aurait une solution en utilisant les sous requête au niveau sélection

    mais c'est très lourd .

  10. #10
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    OUFFFFF!!! Olala, je suis prêt du but....je savais que mon imagination était sans limite ahah. Étant donné que je ne suis pas encore assez bon pour faire des sous requêtes ou quelque chose dans le genre, j'ai décidé de m'en faire plusieurs (4 pour réussir a avoir le prix le plus souvent répertorier) . Voilà, j'explique du mieux que je peux.

    Je me suis créé tout d'abord une Requête0 afin de filtrer mes données non-nécessaires dans la table tblnewprix (elle enlève toutes les prix = 0 et elle ne prends que la valeur "D" dans DepOuEpic). Elle contient les colonnes suivantes : DescFormat ; DescMarq ; DepOuEpic ; PrixReg
    Voici le SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblprixnew.DescFormat, tblprixnew.DescMarq, tblprixnew.DepOuEpic, tblprixnew.PrixReg
    FROM tblprixnew
    WHERE (((tblprixnew.DepOuEpic)="D") AND ((tblprixnew.PrixReg)<>0));
    Requête1 : Faites avec les informations de la Requête0, elle me permet de compter le nombre de fois qu'on peut voir chaque prix avec son prix à côté. Les colonnes sont les suivantes : DescFormat ; DescMarq ; DepOuEpic ; CompteDePrixReg; PrixReg
    Voici mon SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Requête0.DescFormat, Requête0.DescMarq, Requête0.DepOuEpic, Count(Requête0.PrixReg) AS CompteDePrixReg, Requête0.PrixReg
    FROM Requête0
    GROUP BY Requête0.DescFormat, Requête0.DescMarq, Requête0.DepOuEpic, Requête0.PrixReg;
    Requête2 : Faites à partir de la Requête1, elle me permet de prendre le Max de CompterDePrixReg. Les colonnes sont les suivantes : DescFormat ; DescMarq ; DepOuEpic ; MaxCompteDePrixReg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Requête1.DescFormat, Requête1.DescMarq, Requête1.DepOuEpic, Max(Requête1.CompteDePrixReg) AS MaxDeCompteDePrixReg
    FROM Requête1
    GROUP BY Requête1.DescFormat, Requête1.DescMarq, Requête1.DepOuEpic;
    Finalement, ma Requête3 Relie mes champs DescFormat ; DescMarq et DepOuEpic de mes Requête1 et Requête2 ainsi que ma colonne CompteDePrixReg de ma Requête1 avec la colonne MaxDeCompteDePrixReg de ma Requête2. J'ajoute les colonnes suivantes de ma Requête1 à ma Requête3 : DescFormat ; DescMarq; DepOuEpic ; CompteDePrixReg ; PrixReg
    Voici le SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Requête1.DescFormat, Requête1.DescMarq, Requête1.DepOuEpic, Requête1.CompteDePrixReg, Requête1.PrixReg
    FROM Requête1 INNER JOIN Requête2 ON (Requête1.CompteDePrixReg = Requête2.MaxDeCompteDePrixReg) AND (Requête1.DepOuEpic = Requête2.DepOuEpic) AND (Requête1.DescFormat = Requête2.DescFormat) AND (Requête1.DescMarq = Requête2.DescMarq);
    1-Bien entendu, tout ça est compliqué pour avoir le prix le plus souvent répertorié pour chaque Produit. Y aurait-il un autre moyen plus facile?

    2-Il est facile de trouver le maximum de quelque chose, mais y a til un moyen de trouver le 2ème Maximum et le 3ème Maximum???

    Bien entendu, il est facile de se comprendre, mais c'est très difficile de réussir à l'exposer par des mots....Merci, je ne décourage pas!

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/06/2015, 10h34
  2. méthode qui renvoie 2 valeurs ou plus
    Par sandesc dans le forum Général Java
    Réponses: 3
    Dernier message: 26/04/2011, 13h38
  3. Réponses: 18
    Dernier message: 08/11/2009, 21h41
  4. [MySQL] requête qui n'insère pas les valeurs attendues
    Par mimi83 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2008, 03h07

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