SQL combiné instruction SELECT
C'est en fait à partir d'un site interactif SQLzoo.net qui j'ai été en utilisant de rafraîchir mes connaissances SQL.
Le problème est
Trouver les continents où tous les pays ont une population <= 25000000. Ensuite, trouver les noms des pays associés à ces continents. Le nom du spectacle, du continent et de la population.
Ce que j'ai fait pour produire la solution
SELECT name, continent, population
FROM world x
WHERE population <= ALL(SELECT population
FROM world y
WHERE y.continent = x.continent
AND population > 25000000)
Je n'ai pas envie de copier et de modifier la sortie, car il est extrêmement fastidieux - ce qui peut être vérifié en allant dans le Numéro 7. sur cette page - http://www.sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial
J'essaie de comprendre ce que j'écris mal. J'ai fait les autres questions, d'accord, mais celui-ci semble être un peu délicat (ou, éventuellement, de plus en plus imbriquée dans les requêtes SELECT que je pensais).
Toute suggestion/explication est apprécié.
OriginalL'auteur ha9u63ar | 2015-03-08
Vous devez vous connecter pour publier un commentaire.
Mis à jour retiré un zéro(deux fois)
OriginalL'auteur wildplasser
Le code suivant fonctionné pour moi:
OriginalL'auteur GeshmanXD
J'ai écrit SQL pour un long, long temps et presque jamais utiliser
ALL
,SOME
ouANY
.Pour moi, le moyen le plus évident d'écrire cette requête est d'utiliser les fonctions de la fenêtre:
Si vous n'aimez pas cette solution, l'utilisation explicite
join
etaggregation
:OriginalL'auteur Gordon Linoff
La
'ALL'
partie compare la population de tous les pays dans un continent avec 25000000 et si elle est inférieure 25000000, elle imprime les noms, la population de tous les pays.OriginalL'auteur Piyush
De cette manière:
Essentiellement, le continent doit être dans la liste des continents dont le nombre de pays est le même que le nombre de pays qui ont une population inférieure ou égale à ce montant.
La liste est déterminée par une sous-requête.
Le nombre de pays qui ont une population de moins que le montant est déterminé par conditionnelle de l'agrégation.
Sur une note de côté,
minus
va travailler dans Oracle ou SQL Server:Sur la deuxième pensée que vous avez réellement n'avez pas besoin
distinct
comme il y a une ligne par pays. Il existe plusieurs méthodes pour résoudre ce problème, vous pouvez tout aussi facilement, ou plus facilement en fait -- utilisationmax
comme suggéré dans l'autre réponse.Je pense que
minus
travaille dans oracle pas dans SQL Server.OriginalL'auteur Brian DeMilia
Je pense que ce serait simple...
Simplement filtrer les continents avec une population de plus de 25M, vous obtenez le reste..
OriginalL'auteur Abhishek Bansal
J'ai écrit cela, et cela a fonctionné. Il se complique lorsque j'utilise l'état de santé donné que c'est si j'ai utilisé une négation. Si un continent qui a obtenu au moins un des pays avec le plus de population que de 25M, vous souhaitez sauter de la sélectionner. Votre deuxième sélectionnez ne pas suivre cette logique. D'où l'erreur.
Ici, il va :
Code ci-dessus obtient les continents qui ont au moins un pays avec plus de 25 millions de la population et sélectionnez d'abord obtient tous les pays qui ne sont pas originaires de ce continent. Si vous remarquez que nous n'avons pas à vérifier pour la population de nouveau que tous les pays serait évidemment moins peuplé que ou égal à 25M.
OriginalL'auteur bhanuprathap
C'est un moyen facile et en effet
OriginalL'auteur Soneya BInta Hossain
Ci-dessous requête a fonctionné pour moi
Select nom, continent ,population du monde où continent pas dans
(
Sélectionnez continent du monde
où la population >= 25000000)
OriginalL'auteur Mynk Prk
Je pense que cela devrait aider:
OriginalL'auteur ping zhang
SELECT nom, continent, population
DE monde
OÙ continent PAS DANS (SÉLECTIONNEZ continent DU monde OÙ la population > 25000000)
OriginalL'auteur sunakshi132