Datemod Beispiel 3

  • ich glaube nicht, dass es eine unterscheidung zwischen textwerken und instrumentalwerken gibt. ein werk kann auch text und instrumente haben.


    14) "Geben Sie die Komponisten aus, die zu allen ihren Werken selbst einen Text verfasst haben."
    heißt für mich, dass der komponist zu jedem eigenen werk selbst den text verfasst hat. falls er keine werke verfasst hat, gilt diese aussage noch immer für diesen komponisten.

    Die fetten Jahre sind vorbei.

  • Naja mit Textwerken meine ich Werke mit Text, die natürlich auch Instrumental begleitet werden können. Instrumentalwerke sind für mich Werke in denen es nur Instrumente gibt aber keinen Text.
    Wenn du der Meinung bist dass Bring Nix-Fertig zu 14 dazugehört dann gehört er genauso zu 13.
    Ausserdem ist Bring Nix-Fertig nicht mal ein Texter, also könnte er garkeine Texte für seine 0 Werke verfasst haben.

  • Quote from Kitty

    ....
    Wenn du der Meinung bist dass Bring Nix-Fertig zu 14 dazugehört dann gehört er genauso zu 13.

    ja, so habe ich das auch gemeint.


    Quote

    Ausserdem ist Bring Nix-Fertig nicht mal ein Texter, also könnte er gar keine Texte für seine 0 Werke verfasst haben.

    meiner meinung nach gehört er laut dieser angabe schon zu den gefragten personen (egal ob er texten kann oder nicht, er muss es ja nicht können, weil er eh kein werk geschrieben hat).
    aber ich denke, dass die tutoren bei der abgabe mit beiden interpretationen zufrieden sein werden (müssen :D), solange man seine idee erklären kann.

    Die fetten Jahre sind vorbei.

  • zu Beispiel 14:


    Weixis und meiner Meinung nach die einzig richtige Lösung ...

    Code
    1. select vorname,zuname, geburtsdatum from person NATURAL JOIN komponist group by person.id, vorname, zuname, geburtsdatum having (
    2. select count(textwerk.titel) from textwerk where Person.ID=werk.ID and Textwerk.ID=Person.ID)=(
    3. select count(werk.titel) from werk where person.id=werk.id);


    denke dass muesste so passen... schaut euch die Angabe GANZ genau an!

  • frage zu beispiel 17:
    wenn ich als sql-query habe

    SQL
    1. SELECT Titel, Datum, count(*)
    2. FROM Aufnahme JOIN spielt ON (Aufnahme.ID = spielt.IDA)
    3. GROUP BY Titel, Datum


    zählt er bei count alle instrumente (auch gleiche). wie bringe ich ihn dazu, dass er nur verschiedene instrumente zählt (group by instrument funktioniert nicht)

  • Quote from Kitty

    hm also zu 13 gehört Bring Nix-Fertig doch nicht, weil ja nur die angeführt werden sollen die Werke geschreiben haben.

    wo steht das?


    meine lösung für 13 (mit bring nix-fertig natürlich;)):

    SQL
    1. SELECT vorname, zuname FROM person NATURAL JOIN komponist
    2. WHERE NOT EXISTS (SELECT * FROM textwerk t WHERE t.id = p.id AND t.id != t.texter)

    das sind alle komponisten außer jenen, die sich von einer anderen person einen text schreiben haben lassen.


    meine lösung für 14 (wiederum mit bring nix-fertig):

    SQL
    1. SELECT vorname, zuname FROM person p NATURAL JOIN komponist
    2. WHERE (SELECT COUNT(*) FROM werk w WHERE w.id = p.id) =
    3. (SELECT COUNT(*) FROM textwerk t WHERE t.id = p.id AND t.texter = p.id)


    ViennaLinux: deine lösung kann nicht stimmen, da textwerk.texter nie vorkommt, aber absolut relevant für dieses beispiel ist.

    Die fetten Jahre sind vorbei.

  • Quote from soapm

    wo steht das?



    Geben Sie die Komponisten (die Werke geschrieben haben) [Ergänzung 11.5.2006] aus, die sich von keiner anderen Person einen Text haben schreiben lassen (d.h. der Komponist kann auch reine Instrumentalwerke verfasst haben [Klarstellung 12.5.]).

    Naja und zu Komponisten die Werke geschrieben haben gehört Bring Nix-Fertig nun mal nicht.

    Und bei 14 ist es wie gesagt Ansichtssache weil ja (die Werke geschrieben haben) nicht dabei stehst.

  • Könnte das Beispiel 17 dann ungefähr so aussehen?


    SQL
    1. SELECT a.Titel, a.Datum, tmp.count
    2. FROM aufnahme a JOIN spielt s ON (a.ID = s.IDA) JOIN (
    3. SELECT a.ID, COUNT(DISTINCT s.Instrument) as "instrumente"
    4. FROM aufnahme a JOIN spielt s ON (a.ID = s.IDA)
    5. GROUP BY a.ID
    6. ) tmp ON (a.ID = tmp.ID)
    7. GROUP BY a.Titel, a.Datum, tmp.instrumente
    8. HAVING (tmp.instrumente > 1)


    Code
    1. Titel Datum Count
    2. "Marschmusik I"; "1991-11-11"; "5"
    3. "Auf das neue Jahrtausend"; "1993-12-13"; "3"
    4. "Auf das neue Jahrtausend"; "1993-12-15"; "3"
    5. "Woodstock ist auch nur ein Feld"; "1993-12-14"; "2"
  • Quote from Kitty


    Mit deiner Abfrage wird aber auch
    Peppi Bauer 1963-05-17 ausgegeben. Das darf aber nicht sein weil er hat zu seinem Werk nicht den Text geschrieben.


    kleiner denkfehler: korrektur:
    Beispiel 14 (jetzt aber richtig *g*):

    Code
    1. select vorname,zuname, geburtsdatum from person NATURAL JOIN komponist group by person.id, vorname,zuname,geburtsdatum having (
    2. select count(textwerk.titel) from textwerk where Person.ID=werk.ID and Textwerk.texter=Person.ID)=(
    3. select count(werk.titel) from werk where person.id=werk.id);
  • Quote from Kitty

    Geben Sie die Komponisten (die Werke geschrieben haben) [Ergänzung 11.5.2006] aus, die sich von keiner anderen Person einen Text haben schreiben lassen (d.h. der Komponist kann auch reine Instrumentalwerke verfasst haben [Klarstellung 12.5.])


    Ah danke! Habe diese Ergänzung nicht berücksichtigt gehabt.....

    Die fetten Jahre sind vorbei.

  • @ crea-doo

    also >1 ist falsch weil wir ja nur die wollen mit mehr als 2 also dann >2
    und im tmp teil ist auch was falsch bei Marschmusik nie mehr als 2 verschiedne Instrumente vorkommen, ausserdem gibt es ja 2 verschiedene aufnahmen zu Marschmusik

  • Also es waren doch nur 2 kleine Fehler, wie gesagt das mit der 1 und oben das mit tmp.count, tmp.count macht nämlich überhaupt nichts

    Code
    1. [align=left]SELECT a.Titel, a.Datum, tmp.[COLOR=red]instrumente[/COLOR]
    2. FROM aufnahme a JOIN spielt s ON (a.ID = s.IDA) JOIN (
    3. SELECT a.ID, COUNT(DISTINCT s.Instrument) as "instrumente"
    4. FROM aufnahme a JOIN spielt s ON (a.ID = s.IDA)
    5. GROUP BY a.ID
    6. ) tmp ON (a.ID = tmp.ID)
    7. GROUP BY a.Titel, a.Datum, tmp.instrumente
    8. HAVING (tmp.instrumente > [COLOR=red]2[/COLOR])[/align]
  • Beispiel 16:
    Kann mir jemand weiterhelfen. Es ist sicher nur eine Kleinigkeit - warum funktioniert die 2te Subquery nicht so wie ich es erwarte(so wie die erste)?


    SQL
    1. SELECT werk.titel,
    2. (SELECT COUNT(aufnahme.titel) FROM aufnahme WHERE aufnahme.titel=werk.titel) AS AnzahldAufnahmen,
    3. (SELECT COUNT(spielt.ida) FROM spielt WHERE spielt.ida=aufnahme.id) AS AnzMusiker
    4. FROM werk
    5. ORDER BY AnzahldAufnahmen DESC;


    Mein Hirn sagt immer "ja so muesste es stimmen" - aber es geht ned - HILFE


    Das OUTPUT zeigt IMMER 16 Musiker :-(

  • Hab gerade tatsächlich das 30er Beispiel gelöst.
    Für alle die es haben wollen:

    SQL
    1. SELECT id,vorname,zuname,geburtsdatum FROM person NATURAL JOIN musiker
    2. JOIN spielt ON (spielt.idm=musiker.id)
    3. GROUP BY spielt.idm,id,vorname,zuname,geburtsdatum HAVING SUM(verdienst)>700;