Announcement

Collapse
No announcement yet.

Abfrage erstellen

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage erstellen

    Hallo,

    bin relativ neu in SQL-Abfragen, deshalb weiß ich gerade nicht wie ich vorangehen soll.

    Ich habe ein Harry Potter Datenbankschema mit den Characteren, Zaubersprüchen usw.

    Dazu gibt es eine Frage, die Frage lautet:
    Gib eine Tabelle an, die für jeden ausgeführten Zauberspruch die Anzahl der erfolgreichen und fehlerhaften Ausführungen angibt. (spellid,spellname,numsuccesses,numfails)
    Für diese Frage brauche ich 2 Tabellen Appliedspell und Spell
    Appliedspell(appliedspellid, succeeded, characterid, succeeded, spellid,...)
    Spell(spellname, spellid)

    Ich habe auch schon einen Ansatz:

    Select distinct spellid, spellname, succeeded='false' as numfails, succeeded='true' as numsuccesses From Spell natural join Appliedspell;

    Ich bekomme aber nicht das, was von mir erwartet wird. Kann mir bitte jemand helfen.
    Danke im voraus !
    Zuletzt editiert von haci; 03.06.2015, 22:30.

  • #2
    Hallo Haci,

    Bedingungen werden nicht in der SELECT-Klausel sondern in der WHERE-Klausel angegeben.

    Deine Abfrage sollte in etwa so funktionieren
    Code:
    Select distinct spellid, spellname, 
                    (SELECT count(1)
                         FROM Spell i natural join Appliedspell
                        WHERE a.spellid = i.spellid
                          AND succeeded='true') AS numsuccesses,
                    (SELECT count(1)
                         FROM Spell i natural join Appliedspell
                        WHERE a.spellid = i.spellid) 
                          AND succeeded='false') AS numfails
    FROM Spell a;
    Habe die Abfrage noch nicht testen können. Probiere es aus.

    kuemmelchen

    Comment


    • #3
      Hallo kuemmelchen,

      erstmal vielen Dank für die Mühe. Ich habe es jetzt ausprobiert aber es wird etwas Anderes zurückgegeben.

      Comment


      • #4
        Gib doch mal beispielhaft ein paar Datensätze für beide Tabellen an. Welche Werte sollten dann in der Ergebnismenge erscheinen?

        Dann kann ich mir die Aufgabe besser vorstellen und eine hoffentlich richtige SQL-Anweisung nennen.

        kuemmelchen

        Comment


        • #5
          sql.jpg
          Hier ist das Ergebnis, was ich bekommen habe doch in der Spalte numfails sollten nur die Zaubersprüche angegeben werden, die false sind und in der Spalte numsuccesses sollten nur die ausgegeben werden, die true sind.

          Comment


          • #6
            Wenn du meine SQL-Anweisung so ausgeführt hast, dann müssen in den Spalten numsuccesses und numfails Zahlenwerte erscheinen!


            kuemmelchen

            Comment


            • #7
              Genau es dürfen aber keine Zahlenwerte ausgegeben werden, sondern true und false

              Comment


              • #8
                Dann verstehe ich die Aufgabe nicht.
                für jeden ausgeführten Zauberspruch die Anzahl der erfolgreichen und fehlerhaften Ausführungen angibt
                Was ist mit Anzahl gemeint?

                kuemmelchen

                Comment


                • #9
                  Originally posted by haci View Post
                  Hallo,
                  ..
                  Appliedspell(appliedspellid, succeeded, characterid, succeeded, spellid,...)
                  ..

                  Ansatz:

                  Select distinct spellid, spellname, succeeded='false' as numfails, succeeded='true' as numsuccesses From Spell natural join Appliedspell;
                  Colloportus?

                  Appliedspell hat ein succeeded doppelt? Ich geh davon aus, das ist ein Tippfehler.
                  Dann wäre die Frage, wie succedded seine Werte hält? 0;1, true;false?
                  Dann wäre die Frage, welcher SQL Dialekt soll es sein, da ggF. verschiedene Funktionen nötig sind, um zwischen succeeded und not succeded zu unterscheiden*.

                  Dein Ansatz finde ich gar nicht so verkehrt, auch wenn die Fragestellung (mir) nicht ganz klar ist. Ich gehe davon aus, dass Appliedspell eine Art Strichliste aller ausgesprochenen Zaubereien ist mit Wiederholungen.
                  Gefragt ist die Anzahl numfails und numsuccesses. Anzahl könnte man auch als Summe bezeichnen, wenn die Werte sich eignen. Das könnte man in SQL auch SUM() nennen.
                  Dann muss aus einer Ursprungsspalte zwei werden, das hast Du.
                  Diesen Ausschnitt der Select Clause kannst Du mit *if(succedded=true, '1', '0') beginnen (was Du wohl versucht hast) und das Ergebnis summieren und numsuccesses nennen. Umgekehrt werden die Fehler gezählt, also ist die Bedingung oder das Ergebnis für die 2 Spalte umzukehren, aus true wird false oder aus '1', '0' wird '0','1' um die Fehler zu summieren.
                  Wenn Du sum() einsetzt, also eine aggregierende Funktion, müssen alle nicht aggregierten Felder gruppiert werden > also Group By Clause mit den übrigen Feldern an Deinen Ansatz dran hängen.

                  Sesam öffne Dich!

                  * diese Werteprüfung ist je nach Dialekt verschieden: if, coalesce, decode..

                  P.S.: Es gibt auch andere Ansätze, siehe z.B. Vorschlag von Kümmelchen.
                  Gruß, defo

                  Comment


                  • #10
                    OOOOHH jaa uupppss sry Du hast recht

                    Comment


                    • #11
                      Hallo Defo,
                      Danke für deine Hilfe.
                      Ich weiß leider nicht welcher Dialekt es ist, habe auch im Skript steht auch nichts dazu.
                      Die if-Bedingung habe ich ausprobiert es ging nicht

                      Comment


                      • #12
                        Originally posted by haci View Post
                        Ich weiß leider nicht welcher Dialekt es ist, habe auch im Skript steht auch nichts dazu.
                        Die if-Bedingung habe ich ausprobiert es ging nicht
                        Äh? Also "es ging nicht", bedeutet Du arbeitest mit einem System, das nicht verrät, was es ist?
                        Kleiner Tipp: Üblicherweise werden gern echte Statements und echte Fehler gepostet. Denn nicht nur Anfänger haben ihre Probleme, sowas im Kopf zu bearbeiten auch Fortgeschrittene.
                        Du kannst gleich damit anfangen und bitte als Text, nicht als Bild. Es gibt wunderbare Tags für SQL oder eher, es gibt Tags für HTML, die wunderbare Darstellung liefern. Es gibt auch Codeformatter, online, die ein Statement ordentlich setzen.

                        Hab übrigens gestern den Post mit Kümmelchen verpasst und erst später gesehen, kann also sein das meine Annahmen bereits erläutert wurden oder falsch sind.
                        Aber zum Punkt:
                        Wenn es kein IF oder so gibt, dann musst Du wohl einen anderen Ansatz verfolgen und die Bedingung ins Where packen, wie schon vorgeschlagen. Viele Wege führen nach Rom.
                        Ansonsten, und das könnte beabsichtigt sein, pack Dir Dein Script und schau Dir die vorgestellten Befehle noch mal durch.
                        SQL ist ja quasi Mengenlehre, da muss es ja Möglichkeiten geben, unterschiedliche Mengen festzustellen und zu behandeln.
                        Gruß, defo

                        Comment


                        • #13
                          Originally posted by haci View Post
                          Hallo,

                          bin relativ neu in SQL-Abfragen, deshalb weiß ich gerade nicht wie ich vorangehen soll.

                          Crosspost in versch. Foren ist sicher der falsche Weg ...

                          Comment

                          Working...
                          X