2016-11-21 3 views
0

Ich versuche eine Tabelle zu erstellen, die eine Spalte mit der Anzahl der Länder und die nächste Spalte die Anzahl der offiziellen Länder enthält. Im Grunde könnte eine Zeile sagen, dass es 32 Länder mit 2 Amtssprachen gibt, 28 mit 3 Amtssprachen usw.Verwenden einer Unterabfrage mit innerem Join in der from-Klausel?

Bisher habe ich eine Tabelle erstellt, die die Anzahl der Amtssprachen pro Land zählt.

select c.name, count(l.language) number_of_languages from world.country c 
inner join (select countrycode, language, isofficial from 
world.countrylanguage where isofficial='T') l on c.code=l.countrycode group 
by c.name order by count(l.language) 

Hier ist ein Beispiel des Ergebnisses:

NAME             NUMBER_OF_LANGUAGES 
---------------------------------------------------- ------------------- 
Lesotho                2 
Sri Lanka                2 
Canada                 2 
Singapore                3 
Belgium                3 
Bolivia                3 
+0

Was ist die Frage? –

+0

Habe es nicht verstanden. Erkläre, was du willst. – Atul

Antwort

0

Zuerst Ihre Abfrage vereinfacht werden kann. Es braucht nicht eine Unterabfrage zu verwenden:

select c.name, count(cl.language) as number_of_languages 
from world.country c inner join 
    world.countrylanguage cl 
    on c.code = cl.countrycode 
where cl.isofficial = 'T' 
group by c.name 
order by count(cl.language); 

Als nächstes verwenden Sie diese als Unterabfrage:

select number_of_languages, count(*) 
from (select c.name, count(cl.language) as number_of_languages 
     from world.country c inner join 
      world.countrylanguage cl 
      on c.code = cl.countrycode 
     where cl.isofficial = 'T' 
     group by c.name 
    ) cl 
group by number_of_languages 
order by number_of_languages; 
Verwandte Themen