Announcement

Collapse
No announcement yet.

Komplexere Vergleiche

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Komplexere Vergleiche

    Hy, bin noch ziemlich neu in SQL, studiere jetzt im 2 Semester Informationsmanagment, demnach hab ich auch nicht unbedingt gewaltige Grundlagen. Aber einfache Sachen kann ich schon relativ gut und schnell lösen.

    Nur hab ich jetzt ein Problem, da bin ich mit meinem Latein am Ende angekommen .

    Also ich will folgendes SQL-Statement schreiben bzw. ausführen.

    Ich hab aus unterschiedlichen Tabellen die Populationsdaten der einzelnen Länder der Welt zusammengefasst.

    In der Tabelle Country gibt es ein Feld in dem die Gesamteinwohnerzahlt des jeweiligen Landes steht.

    Desweiteren hab ich eine Tabelle Provinzen, dort sind die einzelnen Provinzen bzw. Bundesländer, Kantone etc. der Länder aufgelistet. Die Populationsdaten der einzelnen Provinzen hab ich addiert und ein View erstellt.

    Nun möchte ich vergleichen bei welchen Ländern die Bevölkerungszahl um mehr als 10 % abweicht.

    Nur hab ich keine Idee wie ich den 10 % Unterschied in mein SQL-Statement einbauen kann.

    Hat da jemand eine Idee? Zur Verdeutlichung hier die beiden Statements

    zuerst die Erstellung des Views

    create view Population_der_Welt AS
    select c.name, sum(p.population) as GEWZ
    from province p, country c
    where c.code = p.country
    group by c.name;


    select c.name
    from country c, population_der_welt p
    where p.name = c.name
    and c.population not in p.GEWZ;


    Wenn ich das richtig sehe, gibt mir das zweite Statement die Werte aus die nicht im View enthalten sind.

    Hat jemand eine Idee wie man das lösen könnte?

  • #2
    Hallo!

    Nur zur Vorbereitung:
    create table laender (name varchar(10), GEWZ int)
    insert into laender values ( 'A', 100 )
    insert into laender values ( 'B', 110 )
    insert into laender values ( 'C', 120 )
    insert into laender values ( 'E', 200 )
    insert into laender values ( 'F', 210 )

    So sollte es gehen
    select a.name, b.name, a.gewz, b.gewz from
    laender a, laender b
    where a.name < b.name
    and (a.gewz <= (b.gewz - (b.gewz*0.1))
    or a.gewz >= (b.gewz + (b.gewz*0.1)))

    Liefert
    A C 100 120
    A E 100 200
    B E 110 200
    C E 120 200
    A F 100 210
    B F 110 210
    C F 120 210

    Sieht doch ganz gut aus oder?!?

    BYE BERND

    Comment

    Working...
    X