Quelqu'un peut-il m'aider avec ce qui suit:
Certains pays ont des populations plus que trois fois celui de l'un de leurs voisins (dans la même région). Donner les pays et les régions. P> blockQuote>
mon essai: p>
xxx pré> syntaxe est correct mais aucun enregistrement n'est renvoyé (devrait renvoyer 3 lignes) P>
trouver chaque pays appartenant à un région où toutes les populations sont moins que 25000000. Montrer le nom, la région et population. P> blockquote>
mon essai: p>
xxx pré> j'ai utilisé "pas dans". Y a-t-il un moyen d'utiliser "dans"? P> p>
26 Réponses :
sur votre deuxième requête, vous pouvez le faire sans Si vous insistez à l'aide de l'utilisation inverser la condition: p> dans code> ou
pas dans code>:
Ensuite, la sous-requête retournera toutes les régions avec au moins un pays de plus de 250 m. Ce n'est pas ce que j'ai demandé
Si je comprends vos données correctement, vous n'avez qu'une seule table. Donc, lorsque vous Vous obtenez vraiment une liste de tous les pays qui disposent de 25 millions de personnes et de répertorier leurs noms de région. Pour obtenir une liste de régions, vous devez résumer les populations p> Vous pouvez maintenant sélectionner les pays de ces régions et montrer leurs informations p>
Toutes les populations == la population de chaque pays dans cette région
Pour la première requête, quelque chose comme ça fonctionne?
Pour le premier:
Vous devez diviser le travail. Première étape, trouvez les voisins pour un pays.
Cela doit être une jointure automatique: p> n'oubliez pas d'exclure l'auto-pays des voisins! P> second, vous pouvez compter combien de voisins pour un pays a la bonne population: p> comparer avec le total et que vous avez terminé! p> pour la seconde : p>
Pour votre requête "3 fois sur la population", aucune sous-requête n'est requise ... Juste une jointure auto-rejoindre sur la région, et la population de première instance est> Population de seconde instance * 3. Dans le cas d'une participation auto-jointure Dans sa propre région de la même région, il ne serait jamais rentré depuis que sa population ne serait jamais supérieure à 3 fois sa valeur propre.
En attendant encore des commentaires d'une autre question de population posté comme commentaire dans votre question initiale ... < / p>
Ma solution initiale était très similaire à celle-ci, et pourtant je ne sais toujours pas pourquoi cela ne fonctionne pas.
SELECT name, region, population FROM bbc x WHERE (SELECT SUM(population) FROM bbc y WHERE x.region=y.region) < 250000000
Pour la deuxième requête, "Trouvez chaque pays appartenant à une région où toutes les populations sont inférieures à 25000000. Montrez le nom, la région et la population." (réf. sqlzoo.net, "Sélectionner dans SELECT ', question 3b )
Cela semble équivalent à ne pas spécifier de nombre de population ... À ce stade, vous ne pouvez faire que choisir le nom, la région, la population de BBC;
select name, region from bbc x where population > all (select 3*population from bbc y where y.region=x.region and population > 0 and x.name <> y.name)
Quelques autres solutions, ajoutés pour intérêt.
première requête: p> seconde requête: p>
Solution très efficace et élégante pour le premier. J'aime comment Max est utilisé depuis que cela trouve la prochaine nation la plus grande et la compare ainsi. Mais la deuxième solution donne une sortie incorrecte
SELECT name, region FROM bbc x WHERE population/3 >= ALL (SELECT population FROM bbc y WHERE y.region=x.region AND x.name != y.name)
Trouvez chaque pays qui appartient à un continent où toutes les populations sont inférieures à 25000000. Montrez le nom, le continent et la population
Donc, avant de trouver le continent où tout pays ne devrait pas avoir de population> 25000000. P>
SELECT name, continent, population from world x WHERE continent in (SELECT continent FROM world y WHERE 25000000 > (select max(population) from world z where y.continent = z.continent))
Ceci fonctionnera également dans la requête interne, je sélectionne la deuxième population la plus élevée du continent respectif et dans le
où je vérifie si le deuxième plus haut est 3 fois plus petit ou non dans la population. p> p>
Je traversai également ces petits défis sur Sqlzoo et ces deux questions particulières que j'ai trouvées difficiles.
Certains pays ont des populations plus de trois fois celle de l'un des leurs voisins (dans le même continent). Donner aux pays et continents. p> blockQuote>
Ma première tentative était la suivante: p>
xxx pré> qui me semblait logique. Jusqu'à ce que je me suis rendu compte que si je vérifiais toutes les populations contre toutes les autres populations du continent,
y compris elle-même forte>, alors je ne recevrais jamais de résultats, car la population d'un pays ne sera jamais plus qu'on elle-même fois trois. Vous devez donc vérifier tous les autres pays, à l'exclusion du pays que vous vérifiez. P> Il existe également deux pays du tableau qui ont une population de NULL, vous devez donc aussi exclure ceux-ci pour satisfaire la question. p>
xxx pré> p>
ELAD, votre première réponse est presque em> correct, il manque simplement un composant très clé: Vous voyez lorsque vous effectuez la sous-requête qui vérifie X. Population> 3 * (toutes les y.populations pour le même continent) Vous devez spécifier de ne pas vérifier contre le même pays fort>; Sinon, vous déclarez vérifier que x> 3x, qui est mathématiquement impossible. p> p>
Pour trouver le nom de tous les pays d'un continent, où tous les pays ont une population de moins de 25000000, procédez comme suit:
trouver le maximum (population) groupé par continent p>
SELECT name, continent, population FROM world WHERE continent IN(SELECT continent FROM world WHERE population IN(SELECT max(population) FROM world GROUP BY continent) AND population <= 25000000)
Utilisez cette requête:
SELECT name, continent FROM world x WHERE population/3 > ALL (SELECT population FROM world y WHERE x.continent = y.continent AND x.name != y.name AND population > 0)
Je ne vois pas la différence entre ce que j'ai publié comme une solution, qui a fonctionné et ce que vous avez posté, ce qui est littéralement la même chose, à part la police. Je suis nouveau dans ce monde - avez-vous édité mon message à cause de la police?
SELECT name,continent FROM world x WHERE population > ALL(SELECT population*3 FROM world y WHERE x.continent=y.continent and x.name!=y.name) I've just encountered this problem right now, so sorry if I'm years late. haha! This is how I did it. The purpose of the main select statement is to compare every country then we twist it a little bit in the inner select statement which compares country in the same continent/region only. Also we added a condition where the country from outer select shouldn't be compared with itself.
Pour la première question: vous devez ajouter une autre ligne de code pour la deuxième question: vous pouvez Débarrassez-vous des deux et b.name <> nom code>
pas dans code> et
dans code> à l'aide de
tout code> p>
Cette requête vous aidera. P>
Sélectionnez Nom, Continent du monde A
Où population> Tout (sélectionnez la population * 3 du monde B où A.Continent = B.Content et a.name! = B.Name) code> p> p>
select x.name, x.continent from world x where x.population > 3 * (select y.population from world as y where x.continent = y.continent and x.name <> y.name order by y.population desc limit 1)
Trouvez les continents où tous les pays ont une population <= 25000000. Trouvez ensuite les noms des pays associés à ces continents. Montrer le nom, le continent et la population.
solution p>
Trouvez les continents où tous les pays ont une population C'est ma solution et il semble être le plus simple de tout ce qui précède: p> <= 25000000 code>. Trouvez ensuite les noms des pays associés à ces continents. Afficher
nom code>,
continent code> et
population code>.
La bonne réponse montre que 3 paysilles de pays dans le monde entier. Peut-être que je manque quelque chose. Il devrait y avoir de nombreux pays qui ont 3x + population à leur voisin, en supposant que le voisin ne soit défini que comme pays dans le même continent. P>
C'est-à-dire que l'Afghanistan a une population de 25 millions de personnes, tandis que Bahreïn en Asie a 1,2 million de dollars, ce qui rend l'Afghanistan chemin de plus de 3 fois par rapport à son voisin de Bahreïn. Donc, cela devrait être une solution de réponse correcte trop droite? P>
Cette requête retournera la sortie souhaitée p> blockQuote>
Sélectionnez PaysName, Continent DE ( Sélectionnez Somme (cas lorsque W1.Population> W2.Population * 3 puis 1 autre 0 extrémité) en finaleOutput, compter (*) comme totaleighbours, w1.nom comme paysName, W1.Cont-il en tant que continent Du monde w1 Rejoindre intérieur World W2 Sur w1.Continent = w2.Continent Et w1.name! = W2.name Groupe par pays.name ) comme tbl Où totaleighbours = finalOutput code> p>
Select name , continent from world x where population > All( Select population* 3 from world y where x.continent = y.continent and x.name != y.name);
L'ajout de commentaires contribuera grandement à expliquer pourquoi cela résout la question de l'OP. Juste un morceau de code seul n'est pas aussi utile.
Pour votre "toutes les populations" moins de 25 millions dans une région. Voulez-vous dire que tous les pays individuellement sont moins de 25 millions, ou tous les pays d'une seule région, totalisent moins de 25 millions de ... deux questions totalement différentes.
Il suffit d'ajouter du lien à la question originale où vous pouvez essayer votre solution: sqlzoo.net/wiki/select_within_select_Tutorial # 8