geschachtelte Anfragen

eagle-zero

Grünschnabel
Guten Abend,

Ich versuche mich gerade daran folgende Fragestellung als geschachtelte Anfrage auszudrücken.

A) In welchem Land werden die meisten Sprachen gesprochen ? Gesucht ist der Ländername.
B) In welchen Ländern werden die gleichen Sprachen gesprochen wie in Argentinien ? Gesucht sind die
Ländernamen.

Die Datenbank ist wie folgt aufgebaut (Ausschnitt): Siehe Anhang

Das Programm ist Oracle SQL Developer.

Kann mir da jemand weiterhelfen ?
 

Anhänge

  • 1.jpg
    1.jpg
    105 KB · Aufrufe: 15
  • 2.jpg
    2.jpg
    60,3 KB · Aufrufe: 14
Beides ungetestet

A)
SQL:
SELECT name 
FROM 
country
WHERE 
code = (
SELECT country 
FROM (
SELECT country, count(*) AS cnt 
FROM language
GROUP BY country
ORDER BY count(*) DESC, country
) 
WHERE rownum <= 1
)

B)
SQL:
SELECT 
name
FROM
country
WHERE
code IN (
SELECT DISTINCT 
country
FROM 
language 
WHERE
country != 'ar'
AND
name IN (
SELECT
name
FROM
language
WHERE 
country = 'ar'
)
)
 
Zuletzt bearbeitet:
Danke für die Hilfe aber so kommt als Antwort Andorra raus und ich glaube nicht, dass dort so viele Sprachen gesprochen werden ;). Ist dort vielleicht ein Fehler drin ?

bei a

So, die B von dir stimmt soweit, nur sehe ich gerade den Fehler bei A nicht. Findest du da etwas ?
Das Ergebnis bei A müsste Indien sein.

Vielleicht kannst du mir hier auch helfen. Ich habe hier zwei Anfragen erstellt und möchte diese verschachteln. Nur stehe ich damit aufm Kriegsfuß.

--1a)
select distinct country.name
from city join country on city.country = country.code
group by country.name
having count(city.country) = 3;


--1b)
select distinct country.name as Ländernamen,
sum(city.population) - max(country.population) as Differenzen
from city
join country on city.country = country.code
group by country.name
having sum(city.population) > max(country.population);

Hier die ursprünglichen Fragen

a) Zu welchen Ländern gibt es jeweils nur genau drei Städte? Gesucht sind die Ländernamen.
b) Für welche Länder ist die Summe der Einwohnerzahlen der dazugehörigen Städte grösser als die angegebene Einwohnerzahl des Landes? Gesucht sind Ländername und entsprechende Di fferenz.
 

Anhänge

  • city.jpg
    city.jpg
    92,7 KB · Aufrufe: 6
  • country.jpg
    country.jpg
    74 KB · Aufrufe: 8
  • language.jpg
    language.jpg
    61,8 KB · Aufrufe: 6
Danke für die Hilfe aber so kommt als Antwort Andorra raus und ich glaube nicht, dass dort so viele Sprachen gesprochen werden ;). Ist dort vielleicht ein Fehler drin ?

bei a

ja, da hatte noch was gefehlt... sollte nun gehen (code oben angepasst)

1a)

SQL:
SELECT 
co.name 
FROM 
country co
INNER JOIN
(
SELECT 
  country,
  count(*) as cnt
FROM city
GROUP BY country
HAVING count(*) = 3
) ci
ON 
co.code = ci.country



SQL:
SELECT name 
FROM 
country
WHERE 
code IN (
SELECT 
  country,
  count(*) as cnt
FROM city
GROUP BY country
HAVING count(*) = 3
)

1b)

SQL:
SELECT
co.name,
ci.city_sum - co.population as diff
FROM
country co
INNER JOIN
(
SELECT 
  country,
  sum(population) as city_sum
FROM city 
group by country
) ci
ON
co.code = ci.country
WHERE ci.city_sum > co.population
 
Vielen Dank, die Aufgabe oben stimmt nun. Nun meckert er: ORA-00913: Zu viele Werte
00913. 00000 - "too many values" bei 1a) was du gerade geschrieben hast

edit: 1b ist korrekt, danke
 
Ich komm grad nicht mehr mit ab eurer Diskusion. Ist jetzt eigentlich noch eine Frage offen?
Und bis wann muss die Hausaufgabe gelöst sein?
 

Neue Beiträge

Zurück