Question

Très bien, celui-ci (3a; exemple de problème avec la réponse fournie) m'a fait me gratter la tête :

  

bbc (nom, région, région, population, pib)
   3a. Trouvez le plus grand pays de chaque région:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

Je comprends le concept de ' WHERE y.region = x.region ' quand j'y pense en termes de moteur de base de données bouclant sur les entrées de table et faisant correspondre chaque x.region au courant y.region (dans le SELECT imbriqué) ... mais wtf fait ' AND population > 0 'faire? Ce n’est pas une bonne réponse sans cela, mais je ne vois pas comment…

Était-ce utile?

La solution

Cette clause existe uniquement parce qu'il y a une entrée dans la table Europe (pour le Vatican) qui a NULL dans la colonne population. Les travaux suivants fonctionnent également et sont, à mon avis, plus compréhensibles:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population IS NOT NULL)

Dans la documentation MySQL pour TOUTES les sous-requêtes , il y a un commentaire utile (souligné le leur):

  

En général, les tables contenant les NULL valeurs et les tables vides sont des "cas extrêmes." Lors de la rédaction du code de sous-requête, vérifiez toujours si vous avez pris en compte ces deux possibilités.

Autres conseils

Je spécule ici.

Que se passe-t-il si la population est nulle pour tous les enregistrements d'une région spécifique?

EDIT: Il peut être considéré comme un filet de sécurité d'ignorer cinq valeurs dans la population (ce n'est pas un scénario réel).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top