2016-07-02 3 views
0

Я хочу написать этот запрос в Mondial базы данных:запрос к базе данных Mondial

  1. Перечислите народы, состоящие из островов, по крайней мере, 99%.
  2. Результат должен включать название нации, территорию страны и общую площадь островов (подсказка: обратите внимание на значения, полученные для Соединенного Королевства, поскольку это может быть является признаком ошибок в запрос).
  3. Напишите две версии запроса.

Я написал этот вопрос:

select c.name, c.area, ai.sum_area 
from country as c 
inner join 
    (select sum(i.area) as sum_area, gi.country 
    from island i 
    inner join geo_island gi on (i.name = gi.island) 
    group by gi.country) as ai 
on (c.code = ai.country) 
where (c.area * 0.99) <= ai.sum_area; 

Но результат не так! в некоторых странах сумма больше, чем площадь островов страны! Как это исправить? Вот документация от Mondial базы данных: http://www.dbis.informatik.uni-goettingen.de/Mondial/ и здесь Referential Dependencies of the Mondial Database

Country - area Country - Sum area islands  

"Guernsey";194;194  
"Iceland";103000;102829  
"Ireland";70280;84421  
"Jersey";117;117  
"Isle of Man";588;588  
"United Kingdom";244820;2622428.6  
"Bahrain";620;620  
"Brunei";5770;743122 
"Malaysia";329750;1486335  
"Christmas Island";135;135  
"Cyprus";9251;9251  
"Indonesia";1919440;10333702  
"Timor-Leste";15007;33850  
"Papua New Guinea";461690;794800  
"Japan";377835;8247391  
"Philippines";299764;1421325  
"Singapore";632.6;632.6  
"Sri Lanka";65610;65610  
"Antigua and Barbuda";442;442  
"Aruba";193;193  
"Barbados";430;430  
"Bermuda";53.3;53.3  
"Cuba";110860;1481284  
"Dominica";746;746  
"Dominican Republic";48730;76192  
"Haiti";27750;76192  
"Greenland";2175600;2175600  
"Grenada";344;344  
"Jamaica";10991;10991  
"Martinique";1128;1128  
"Montserrat";102;102  
"Curacao";444;444  
"Sint Maarten";34;87  
"Saint Martin";54;87  
"Saint Barthelemy";21;21  
"Puerto Rico";8870;8870  
"Saint Lucia";620;616  
"Trinidad and Tobago";5130;5128  
"Guam";541.3;541  
"Nauru";21;21 
"New Zealand";268680;266354  
"Niue";260;260  
"Samoa";2860;2832  
"Madagascar";587041;587041  
"Mayotte";374;374 
"Reunion";2510;2510  
"Sao Tome and Principe";1001;1001 

ответ

0

Привет, вы можете попробовать этот запрос

SELECT c.name. c.area, x.sum_area 
FROM country c 
INNER JOIN 
(SELECT gi.country, SUM(i.area) as sum_area 
FROM geo_island gi 
INNER JOIN island i ON 
gi.island = i.name 
GROUP BY gi.country) x 
ON c.name = x.country 
WHERE (c.area * 0.99) <= x.sum_area; 
+0

результат запроса пуст –

Смежные вопросы