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 :

Trouver le maximum d’occurrences dans un 'top 6'.


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 28
    Points : 16
    Points
    16
    Par défaut Trouver le maximum d’occurrences dans un 'top 6'.
    Bonjour,

    1. Explications :

    J'ai une base de données MySQL avec XAMPP en local qui concerne une gestion de voitures (location avec forfait).

    Ma table Véhicule contient :

    Vehicule_Id => L'identifiant du véhucule.
    Vehicule_Immatriculation => La plaque d'immatriculation du véhicule.
    Modele_Id => L'identifiant concernant le modele du véhicule (1 correspond par exemple à BMW I8).

    Modele_Id est une clé étrangère faisant le lien entre VEHICULE et MODELE.

    Pluisuers VEHICULES peuvent avoir UN même MODELE.

    Voici un extrait :

    Nom : Capturess.PNG
Affichages : 893
Taille : 34,1 Ko


    2. Demande SQL :

    => Je voudrais connaitre le modèle qui existe le plus parmi mes voitures.
    => Et si possible (mais je ne pense pas que ce soit possible en SQL), avoir une liste des 6 modèles qui existent le plus parmis tous les véicules.


    J'arrive à compter le nombre de véhicule pour chaque modele, mais comment trouver le maximum, parmis un genre de COUNT de chaque modele svp ?

    La requête pour 1 modèle précis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(*)
    FROM vehicule V
    WHERE V.Modele_Id IN (
        SELECT Modele_Id
        FROM modele
        WHERE Modele_Libelle = 'BMW I8'
        )
    Je me suis dit que ça ne se ferait surement que en PHP ?

    Je reste à votre disposition pour tout renseignement. N'hésitez pas !

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 105
    Points : 28 394
    Points
    28 394
    Par défaut
    Première étape : effectuer un comptage de tous les véhicules par modèle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  VHC.MODELE_ID
        ,   count(*)        as NOMBRE
    from    VEHICULE    VHC
        inner join
            MODELE      MDL
            on  MDL.MODELE_ID   = VHC.MODELE_ID
    group by VHC.MODELE_ID
    order by NOMBRE desc
    ;

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 133
    Points
    53 133
    Billets dans le blog
    6
    Par défaut
    Avec une fonction de fenêtrage c'est assez facile : vous calculez le nombre de modèle par marque/modèle et vous utilisez la fonction RANK() OVER(ORDER BY COUNT(...) DESC) AS RANG... Puis dans une sous requête vous filtrez sur RANG <= 6

    À me lire : https://sqlpro.developpez.com/articl...clause-window/

    A +

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Première étape : effectuer un comptage de tous les véhicules par modèle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  VHC.MODELE_ID
        ,   count(*)        as NOMBRE
    from    VEHICULE    VHC
        inner join
            MODELE      MDL
            on  MDL.MODELE_ID   = VHC.MODELE_ID
    group by VHC.MODELE_ID
    order by NOMBRE desc
    ;
    Wow merci pour votre réponse aussi rapide. Je ne pensais pas que c'était aussi "simple" je n'avais pas vu de cette façon merci.

    Je vais continuer avec ceci.

    Merci beaucoup !

    Citation Envoyé par SQLpro Voir le message
    Avec une fonction de fenêtrage c'est assez facile : vous calculez le nombre de modèle par marque/modèle et vous utilisez la fonction RANK() OVER(ORDER BY COUNT(...) DESC) AS RANG... Puis dans une sous requête vous filtrez sur RANG <= 6

    À me lire : https://sqlpro.developpez.com/articl...clause-window/

    A +
    Merci pour votre réponse si détaillée également.

    Je ne connaissais absolument pas cette fonctionnalité en SQL et il me tarde de tester tout ça.

    Merci à vous, je vais prendre le temps d'exploiter cette fonctionnalité !

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 337
    Points : 39 729
    Points
    39 729
    Billets dans le blog
    9
    Par défaut
    attention : les fonction de fenêtrage ne sont disponibles que depuis la version 8 de MySQL
    si vous utilisez une 5.x c'est mort...

Discussions similaires

  1. trouver le maximum dans une courbe
    Par Axiome dans le forum Simulink
    Réponses: 1
    Dernier message: 16/11/2009, 09h11
  2. Réponses: 2
    Dernier message: 19/10/2005, 22h29
  3. Comment trouver le SubItem cliqué dans un TListview ?
    Par Invité dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/10/2005, 12h27
  4. Trouver un maximum entre 2 chiffres sans tests
    Par orichimaru dans le forum Algorithmes et structures de données
    Réponses: 32
    Dernier message: 25/03/2005, 11h05
  5. [CR] trouver le maximum ?
    Par Etienne51 dans le forum Formules
    Réponses: 3
    Dernier message: 25/06/2004, 17h04

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