SELECT within SELECT Tutorial

Link

namecontinentareapopulationgdp

Afghanistan

Asia

652230

25500100

20343000000

Albania

Europe

28748

2831741

12960000000

Algeria

Africa

2381741

37100000

188681000000

Andorra

Europe

468

78115

3712000000

Angola

Africa

1246700

20609294

100990000000

...

1. List each country name where the population is larger than that of 'Russia'.s

SELECT name 
FROM world
WHERE population > (SELECT population FROM world WHERE name = 'Russia')
  1. Show the countries in Europe with a per capita GDP greater than 'United Kingdom'.

SELECT name
FROM world
WHERE continent = 'Europe'
AND GDP/population > (SELECT GDP/population 
                FROM world 
                WHERE name = 'United Kingdom')
  1. List the name and continent of countries in the continents containing either Argentina or Australia. Order by name of the country.

SELECT name, continent
FROM world
WHERE continent IN ( SELECT continent 
                FROM world 
                WHERE name IN ('Argentina', 'Australia'))
ORDER BY name
  1. Which country has a population that is more than United Kingdom but less than Germany? Show the name and the population.

SELECT name, population
FROM world
WHERE population > (SELECT population FROM world WHERE name = 'United Kingdom')
AND population < (SELECT population FROM world WHERE name = 'Germany')
  1. Germany (population 80 million) has the largest population of the countries in Europe. Austria (population 8.5 million) has 11% of the population of Germany. Show the name and the population of each country in Europe. Show the population as a percentage of the population of Germany.The format should be Name, Percentage for example:

nameC

Albania

3%

Andorra

0%

Austria

11%

...

...

SELECT 
    name, 
    CONCAT(ROUND(100*population/(SELECT population 
                FROM world 
                WHERE name = 'Germany'),0),'%') AS percentage
FROM world
WHERE continent = 'Europe'

SQLZOO system error: error

SELECT 
    name, 
    CONCAT(ROUND(CAST(population AS NUMERIC)/(SELECT CAST(population AS NUMERIC)
            FROM world 
            WHERE name = 'Germany')*100,2),'%') AS percentage
FROM world
WHERE continent = 'Europe';

note: above code is in Postgres

  1. Which countries have a GDP greater than every country in Europe? [Give the name only.] (Some countries may have NULL gdp values)

SELECT name
FROM world
WHERE gdp > ALL (SELECT gdp
                FROM world
                WHERE continent = 'Europe')
AND gdp IS NOT NULL
  1. Find the largest country (by area) in each continent, show the continent, the name and the area:

SELECT continent, name, area
FROM world
WHERE area IN (SELECT MAX(area) 
                FROM world 
                WHERE area > 0 
                GROUP BY continent)
  1. List each continent and the name of the country that comes first alphabetically.

SELECT continent, MIN(name) AS first_country
FROM world
GROUP BY continent
  1. Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population.

SELECT a.name, a.continent, max_pop 
FROM world a 
JOIN (SELECT continent, MAX(population) as max_pop 
FROM world GROUP BY continent) b 
ON (a.continent = b.continent AND a.population = b.max_pop)
WHERE max_pop <= 25000000
  1. Some countries have populations more than three times that of all of their neighbours (in the same continent). Give the countries and continents.

SELECT name, continent, population 
FROM world w 
JOIN 
(SELECT t1.continent, t1.max_pop, t2.nd_max_pop 
   FROM (
   SELECT continent, MAX(population) as max_pop 
   FROM world 
   WHERE population <> 0 
   GROUP BY continent) t1 
    JOIN 
     (SELECT continent, MAX(population) as nd_max_pop 
      FROM world WHERE name NOT IN (SELECT a.name 
           FROM world a
           JOIN (SELECT continent, MAX(population) as max_pop 
                FROM world 
                WHERE population <> 0 
                GROUP BY continent) b 
           ON a.continent = b.continent AND a.population = b.max_pop) 
           AND population <> 0 GROUP BY continent) t2 
       ON t1.continent = t2.continent WHERE t1.max_pop/3 > t2.nd_max_pop) t3 
ON w.continent = t3.continent AND w.population = t3.max_pop

Last updated