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 :

req. SQL avec pourcentage


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 30
    Par défaut req. SQL avec pourcentage
    bonjour,
    j'ai un petit problème pour formaliser une requête.
    Voici un exemple simplifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE voiture
    (
      marque character varying(64),
      modele character varying(64),
      panne boolean
    )
     
    insert into voiture values ('peugeot','207',false);
    insert into voiture values ('peugeot','207',false);
    insert into voiture values ('peugeot','207',false);
    insert into voiture values ('peugeot','207',true);
    insert into voiture values ('renault','clio',false);
    insert into voiture values ('renault','clio',true);
    je cherche à avoir une sortie me donnant le taux de panne par modèle qui idéalement serait:

    taux marque modele
    25 peugeot 207
    50 renault clio

    car 1 panne pour 4 peugeot 207
    et 1 panne pour 2 renault clio

    j'ai beaucoup cherché mais pas trouvé le moyen de le faire dans une seule requête SQL
    merci de vos suggestions

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez commencer par convertir vos booléens en 1 ou pour true et 0 pour false et regarder du côté des aggrégats.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 30
    Par défaut
    c'était une simplification extrême et dans mes tables, j'ai effectivement des valeurs plutôt que des booleens.
    Les agrégats certes mais il faut une sous-requête par marque/modele et ça se complique très fortement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE voiture
    (
      marque character varying(64),
      modele character varying(64),
      panne integer
    )
     
    INSERT INTO voiture VALUES ('peugeot','207',0);
    INSERT INTO voiture VALUES ('peugeot','207',0);
    INSERT INTO voiture VALUES ('peugeot','207',0);
    INSERT INTO voiture VALUES ('peugeot','207',1);
    INSERT INTO voiture VALUES ('renault','clio',0);
    INSERT INTO voiture VALUES ('renault','clio',1);

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Pas besoin de sous-requete.
    Il faut faire la somme des pannes, divisé par le nombre de lignes, multiplié par 100 pour obtenir un pourcentage, groupé par marque/modele.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
           marque, 
           modele,
           sum(panne)*100/count(*) as pourcentage_panne
    from voiture
    group by marque, modele

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 30
    Par défaut
    effectivement, solution ultra simple alors que j'étais parti dans une usine à gaz
    merci beaucoup

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Et même plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
        marque, 
        modele,
        avg(panne)*100 AS pourcentage_panne
    FROM voiture
    GROUP BY
        marque, 
        modele

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

Discussions similaires

  1. req sql avec intervalle de date
    Par ahmedmido dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/12/2008, 15h49
  2. Requête SQL avec Signe pourcentage
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/05/2007, 17h35
  3. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 14h57
  4. probleme sql avec delphi
    Par lil_jam63 dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/02/2004, 05h32
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 12h37

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