mysql base de données mondiale: sélectionner le pays avec max de la population

Je veux choisir le pays avec la population la plus élevée. C'est ma requête:

SELECT continent, name, population FROM country HAVING population = MAX(population);

En quelque sorte, elle renvoie 0 lignes.

Si j'utilise une requête imbriquée cela fonctionne:

SELECT continent, name, population FROM country WHERE population = (SELECT MAX(population) FROM country);

Donc ma question est: Quel est le problème avec la première requête?

PS: Vous pouvez télécharger la base de données ici:
http://dev.mysql.com/doc/index-other.html


Bien je pense que j'ai enfin compris l'ensemble du processus. Voici comment cela fonctionne et pourquoi les autres suggestions/solutions ne marche pas:

(Tout d'abord, comme "Dan Bracuk", a déclaré, dans sa réponse, nous devons combiner GROUPE PAR avec AVOIR et ajouter la fonction d'agrégation à la begininng dans l'instruction SELECT)

Donc, nous allons y aller étape par étape et essayez ce qui suit:

SELECT continent, name, population, MAX(population) FROM country;

Cela donne-nous la première ligne annexé MAX(pop) à la fin:
"Amérique Du Nord", "Aruba", "103000", "1277558000"

Donc MAX(de la population) n'est qu'une seule entrée, de sorte qu'il limite le nombre de ligne de 1 et parce que j'ai ajouté le continent, le nom, la population des colonnes, mysql juste sélectionne la première ligne de la table.

Donc, si je écrire:

SELECT continent, name, population, MAX(population) FROM country HAVING population = MAX(population);

- Je obtenir 0 lignes, car 103000 n'est pas égal à 1277558000.

Si j'utilise:

SELECT continent, name, population, MAX(population) FROM country GROUP BY name;

par exemple, j'obtiens la liste de tous les pays, où sur chaque ligne MAX(population) = population.

Si en outre l'ajout d'AVOIR "population = MAX(de la population)" n'a aucun effet puisque c'est déjà le cas.

J'espère que j'ai bien compris et préciser les autres, qui se demandait pourquoi les autres solutions n'ont pas fonctionné.

N'est-ce pas un exemple de HAVING without GROUP BY problème? Si oui, alors c'est une question d'évaluation.
Hmmm, je pense que vous avez raison. Mais que voulez-vous dire avec un enjeu de l'évaluation?
J'ai peut-être tort sur l'explication de votre requête échoue, mais je peux faire la lumière sur le "ne pas avoir GROUP BY" de l'émission. HAVING est évalué avant SELECT et après GROUP BY. Imaginez que vos résultats se filtrée lentement. FROM agit tout d'abord, la jointure de tables si nécessaire. Ensuite, WHERE filtre les résultats de la table. Voici la partie qui vous intéresse: GROUP BY va transformer ces lignes en groupes, puis HAVING va supprimer tous les groupes qui ne sont pas qualifiés selon votre condition. SELECT va maintenant venir travailler sur le reste de la liste. Cela signifie HAVING ne peut pas fonctionner sur votre SELECT.
Les questions ci-dessus parce que vous êtes en train de faire deux choses: votre référencement sur population quand il ne peut pas être référencée encore. Plus, vous n'avez pas de GROUP BY de "forcer" population à apparaître. Je ne suis pas expert en SQL donc la question avec votre requête peut être hors de la marque. Cependant, la logique de l'évaluation semble à l'appui de cette.
J'ai édité ma réponse, et pense que cela répond à votre question complètement.

OriginalL'auteur A.B. | 2013-12-02