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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 7
    Points : 6
    Points
    6

    Par défaut Comment réaliser cette requête?

    Bonjour,

    Je voudrais savoir, si possible, à quoi le "where" devrait ressembler si je veux connaitre les locaux dans lesquels se trouvent, au moins, 4 ordinateurs.

    Nom : mcd.jpg
Affichages : 32
Taille : 30,2 Ko

    Voici le "select" que j'ai réalisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblLocal.numeroLocal, tblSite.lieu, tblMarque FROM tblSite 
    inner join tblLocal
    ON tblLocal.idSite = tblSite.idSite
    inner join tblOrdinateur
    ON tblOrdinateur.idLocal = tblLocal.idLocal
    inner join tblMarque
    ON tblOrdinateur.idMarque = tblMarque.idMarque
    Je n'ai appris que le "inner join" pour l'instant donc je joins tblOrdinateur à l'ensemble pour pouvoir accéder à tblMarque. Si vous avez une méthode qui
    permettrait de ne pas joindre tblOrdinateur (vu qu'il n'est pas utilisé), je serais curieux de savoir laquelle

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 822
    Points : 24 537
    Points
    24 537

    Par défaut

    Pour compter le nombre d'ordinateurs dans un local, il faudra faire un regroupement.
    Les restrictions sur le réultat d'un regroupement ne s'efectuent pas dans la clause WHERE mais dans la clause HAVING, après les critères de regoupement énoncés dans la clause GROUP BY.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 7
    Points : 6
    Points
    6

    Par défaut

    Merci,

    J'ai trouvé la requête selon vos informations et elle fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblLocal.numeroLocal, tblSite.lieu, count(tblOrdinateur.idOrdinateur) FROM tblSite 
    inner join tblLocal
    ON tblLocal.idSite = tblSite.idSite
    inner join tblOrdinateur
    ON tblOrdinateur.idLocal = tblLocal.idLocal
    GROUP BY tblLocal.numeroLocal, tblSite.lieu
    HAVING COUNT(tblOrdinateur.idOrdinateur) > 3
    Cependant, j'avoue ne pas bien comprendre le concept du group by. Car sans group by, il me retourne une erreur. Je comprend bien que le group by regroupe la colonne pour éviter les doublons mais pourquoi c'est obligatoire? C'est certainement une question débile mais je suis vraiment débutant

    Merci

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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 : 15 958
    Points : 31 624
    Points
    31 624
    Billets dans le blog
    5

    Par défaut

    Sans le GROUP BY, vous aurez tous les ordinateurs, à raison d'un ordinateur par ligne, avec répétition sur chaque ligne du site et du local s'il y a plusieurs ordinateurs dans un local.

    Comme vous voulez compter le nombre d'ordinateur par local, il faut faire un regroupement par local, donc utiliser un GROUP BY.

    Et comme vous cherchez les locaux qui ont plus de 3 ordinateurs, il faut mettre cette condition de restriction dans un HAVING qui est l'équivalent d'un WHERE mais qui opère sur un groupement.

    Le GROUP BY ne sert pas à éviter les doublons, même si c'est en pratique ce qu'il fait. Pour éviter des lignes en double dans le résultat d'une requête sans fonction de regroupement, on utilise DISTINCT.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    juillet 2011
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2011
    Messages : 229
    Points : 571
    Points
    571

    Par défaut

    Citation Envoyé par YellowError Voir le message
    Je comprend bien que le group by regroupe la colonne pour éviter les doublons mais pourquoi c'est obligatoire? C'est certainement une question débile mais je suis vraiment débutant

    Merci
    Le group by ser à indiquer sur quelles colonnes les agrégats seront calcules. Il ne sert pas à éviter les doublons même si c'est un de ses effets de bord.

    Normalement dans une requête select avec un group by tu dois citer dans la clause group by TOUTES les colonnes qui ne sont pas des fonctions d'agrégation (Count/Sum/Avg....)

    Cordialement

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2018
    Messages : 7
    Points : 6
    Points
    6

    Par défaut

    Merci beaucoup. Je comprends mieux même si j'ai toujours un peu de mal. Si je devais réutiliser un group by, je pense que je tatillonnerais encore. Je vais finir par avoir le déclic à un moment donner. Enfin je l'espère.

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

Discussions similaires

  1. Comment réaliser cette requête
    Par nostrora dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/05/2012, 22h55
  2. Comment faire cette requête ?
    Par Cazaux-Moutou-Philippe dans le forum Bases de données
    Réponses: 11
    Dernier message: 02/11/2007, 09h44
  3. [XHTML] Comment réaliser cette boite ?
    Par °°° Zen-Spirit °°° dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/09/2006, 21h19
  4. Comment réaliser ma requête ?
    Par leloup84 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/02/2006, 10h16
  5. Comment réaliser cette config multiboot Windows-Linux?
    Par _Alain_ dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 11/01/2006, 16h40

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