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 :

Avoir la bonne façon de faire


Sujet :

Langage SQL

  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Points : 1 667
    Points
    1 667
    Par défaut Avoir la bonne façon de faire
    Bonjour, étant loin d'être le meilleur dans le SQL, je me demande comment je pourrais faire pour améliorer mon raisonnement lorsqu'il s'agit d'une requête.

    Par exemple (je suis étudiant), lorsque j'ai des exercices avec donc des requêtes à faire et que je ne trouve pas la réponse, je regarde la correction et je m’aperçois qu'il était recommandé d'utiliser les sous-requêtes mais je n'ai pas eu le réflexe de le faire.

    Prenons en exemple la BDD world( disponible ici ):


    Pour la question "Trouver la plus grande ville de chaque continent", je me dis en premier qu'il me faut la clause 'GROUP BY Country.Continent' et qu'il faut que je prenne chaque continent et une jointure entre les tables Country et City puis la ville la plus peuplée.

    Or la réponse (proposée) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT c.Continent, City.Name
    FROM Country AS c JOIN City ON Code = CountryCode,
    (SELECT Continent, MAX(City.Population)
    AS population FROM Country JOIN City ON Code = CountryCode
    GROUP BY Continent) AS tb1
    WHERE c.Continent = tb1.Continent
    AND City.Population = tb1.Population;
    Comment faîtes-vous pour avoir la bonne façon de penser?
    Certains dirons que c'est en forgeant que l'on devient forgeron.
    Je pratique mais ca a du mal à rentrer donc possible que je vois mal les choses..

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Concrètement, vous noterez que votre raisonnement est plutôt proche : la sous-requête proposée fait bien un GROUP BY continent, avec une jointure sur les villes, et prend le max de la population.
    La requête englobant permet de ramener des informations ayant trait à la ville ayant le plus de population (sans gérer le cas des ex-eaquo, soit dit en passant).

    On pourrait faire autrement, d'ailleurs, de façon un peu plus naturelle à mon goût (à savoir, trier les cités par ordre de population pour chaque continent, et prendre la 1ère) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT tb1.Continent, tb1.Name AS City_Name
    FROM (SELECT Continent, City.Name, RANK() OVER (PARTITION BY Continent ORDER BY City.Population DESC) As Rang_Cite
    FROM Country JOIN City ON Code = CountryCode
    ) AS tb1
    WHERE tb1.Rang_Cite = 1
    Et si on veut départager les ex-eaquo, on peut rajouter City.Name ASC dans l'ordre du OVER.

Discussions similaires

  1. La "bonne façon" de faire du parallelisme
    Par drunkskater dans le forum Caml
    Réponses: 6
    Dernier message: 30/09/2013, 20h53
  2. Multithread, bonne façon de faire
    Par Ghurdyl dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/03/2010, 12h08
  3. [Tableaux] Bonne façon de faire ou non ?
    Par gregetso dans le forum Langage
    Réponses: 10
    Dernier message: 14/10/2008, 14h41
  4. Question sur la bonne façon de faire un JMenuBar
    Par bit_o dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2007, 10h26
  5. [Checkbox] La bonne façon et comment faire
    Par Meewix dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2006, 09h23

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