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 MySQL Discussion :

créer une vue ou pas avec des counts de différentes tables


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut créer une vue ou pas avec des counts de différentes tables
    Bonjour,

    J'ai 3 tables (fictives pour l'exemple, c'est juste pour apporter un peu de poésie ) :
    - 1 avec des départements [id, nom, etc...]
    - 1 avec des policiers [id, nom, departement_id, etc...]
    - 1 avec des dealers [id, nom, departement_id, etc...]

    n policiers sont rattachés à 1 département d'où le departement_id dans la table des policiers, même chose pour les dealers.

    Ce que je voudrai avoir c'est une vue avec comme colonne :
    id_departement | nom_departement | nb_policiers_pour_ce_departement | nb_dealers_pour_ce_departement

    j'ai rajouté un where pour pas voir figurer la capitale... (en faite il y' a un departement spéciale qui ne doit pas figurer dans le résultat)

    J'ai essayé un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE VIEW destination_vacances AS
    SELECT departements.id as departements_id,departements.name as departements_name, Police.nbPolices as nb_police
    FROM departements,
    (
    select count(police.id) as nbPolice
    from police
    LEFT JOIN departement on departement.id = police.departement_id
    order by departement.name
    ) as Police
    where departement.capitale <>1
    order by departement.name;
    ....Même chose avec les dealers
    Évidement ça ne fonctionne pas et ça me génère l'erreur suivante :
    View's SELECT contains a subquery in the FROM clause
    Merci pour votre aide!!

    Vivement les vacances.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 051
    Points
    34 051
    Billets dans le blog
    14
    Par défaut
    Euh... pour compter quelque chose par département, il faut grouper par département or il n'y a pas de GROUP BY dans votre requête donc ça ne peut pas vous donner le bon résultat !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW destination_vacances AS
    SELECT d.id AS departement_id, d.name AS departement_name,
      COUNT(p.id) AS nbPolice,
      COUNT(de.id) AS nbDealers
    FROM departement AS d
    LEFT OUTER JOIN police AS p ON p.departement_id = d.id
    LEFT OUTER JOIN dealer AS de ON de.departement_id = d.id
    WHERE d.capitale <> 1
    GROUP BY d.id, d.name
    ORDER BY d.name

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Hello,

    Merci pour ton aide!!!

    J'avais effectivement commencé par faire ça mais ça ne fonctionne pas.

    Une démonstration vaut mieux qu'un grand discours :

    avec les données suivantes et la requête au-dessus j'aurai le résultat suivant :

    Données :

    Pour la table Departement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ID : 1
    NAME : NORD
    ID : 2
    NAME : ALSACE
    ID : 3
    NAME : LORRAINE
    ID : 4
    HAUTE NORMANDIE
    Pour la table Police
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID : 1
    NAME : Police départementale du nord
    DEPARTEMENT_ID : 1
    ID : 2
    NAME : Police départementale du nord à gauche
    DEPARTEMENT_ID : 1
    ID : 3
    NAME : Police départementale de la lorraine
    DEPARTEMENT_ID : 3
    Pour la table dealers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID : 1
    NAME : Dealers de poivre
    DEPARTEMENT_ID : 1
    ID : 2
    NAME : Dealers de sel
    DEPARTEMENT_ID : 2
    Le résultat que j'ai obtenu avec la requete :
    ID | NAME | NBPOLICE | NBDEALERS
    1 | NORD | 2 | 2
    2 | ALSACE | 0 | 1
    3 | LORRAI | 1 | 0
    4 | NORMA | 0 | 0
    Le problème c'est pour le nord j'ai bien mes deux policiers mais j'ai je n'ai qu'un dealer!!

    Sinon pour le reste ça se passe bien j'ai bien des 0 pour les départements vide et le bon nombre quand il a des informations que dans 1 table sur les deux.

    A partir du moment ou j'ai des policiers et des dealers ça fonctionne pas!!!

    C'est pour ça que je suis partie sur une sous requête!!!

    Merci encore pour ton aide.


    PS : ma requete d'au-dessus est erroné aussi elle me retourne tous mes départements mais pour les nombres de policiers et dealers il me donne tout le temps le total (tout mes policiers et tout mes dealers) pour chaque département.

  4. #4
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    MERCI CinePhil !!!

    J'ai repris la requête et en refléchissant un peu j'ai trouvé ou j'avais fauté!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW destination_vacances AS
    SELECT d.id AS departement_id, d.name AS departement_name,
      COUNT(Distinct(p.id)) AS nbPolice,
      COUNT(Distinct(de.id)) AS nbDealers
    FROM departement AS d
    LEFT OUTER JOIN police AS p ON p.departement_id = d.id
    LEFT OUTER JOIN dealer AS de ON de.departement_id = d.id
    WHERE d.capitale <> 1
    GROUP BY d.id, d.name
    ORDER BY d.name
    Il suffit de mettre distinct sur les id des count et ça passe!!!

    Merci encore!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2009, 09h11
  2. Créer une vue avec des onglets
    Par Flackou dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2007, 11h43
  3. Réponses: 9
    Dernier message: 24/03/2007, 22h37
  4. Réponses: 5
    Dernier message: 17/07/2006, 18h34
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 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