Announcement

Collapse
No announcement yet.

Denkblockade bei SQL Abfrage

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

  • Denkblockade bei SQL Abfrage

    Hallo,

    sitze gerade über einen Hausaufgabenproblem mit meinem Sohn.
    Er macht ein Datenbankprojekt und muss einige Abfragen erstellen. Es geht im Grunde um ein Autohaus. Es gibt Tabellen mit den Autos, Automarken, und Modellen. Die bisherige Abfrage sieht so aus:

    SELECT "Auto"."ModellID", COUNT("Auto"."AutomarkenID") AS "Anzahl"
    FROM "Automarken", "Auto"
    WHERE "Auto"."AutomarkenID" = "Automarken"."AutomarkenID"
    GROUP BY "Auto"."ModellID"
    ORDER BY "Anzahl" DESC

    Abgefragt werden soll die Anzahl der Autos, die vom jeweiligen Modell vorhanden sind.
    Insoweit funktioniert auch alles ganz gut. Nur bekommen wir nun die zwei Spalten ModellID und Anzahl angezeigt. Für die Spalte ModellID hätten wir aber lieber den Modellnamen, der in einer weiteren Tabelle "Modell" der ModellID zugeordnet ist. Nun weiss ich aber leider nicht wie ich es schaffe das auf diese Tabelle verwiesen wird. Ich hoffe ich habe mich verständlich ausgedrückt. Vielen Dank.

    LG Michael

  • #2
    http://sql.1keydata.com/de/sql-join.php
    Christian

    Comment


    • #3
      Danke für die schnelle Antwort. Habs mir durchgelesen und soweit auch verstanden. Anschließend versucht zu überarbeiten. Jetzt schauts so aus:

      SELECT "Modell"."Name", COUNT("Auto"."AutomarkenID") AS "Anzahl"
      FROM "Auto", "Modell"
      WHERE "Modell"."ModellID" = "Auto"."ModellID"
      GROUP BY "Auto"."ModellID"
      ORDER BY "Anzahl" DESC

      Leider bekomm ich jetzt bei der Abfrage folgende Fehlermeldung:

      SQL-Status: 37000
      Fehler-Code: -67

      Not in aggregate function or group by clause: org.hsqldb.Expression@152573e in statement [SELECT "Modell"."Name", COUNT( "Auto"."AutomarkenID" ) AS "Anzahl" FROM "Auto", "Modell" WHERE "Modell"."ModellID" = "Auto"."ModellID" GROUP BY "Auto"."ModellID" ORDER BY "Anzahl" DESC]

      Comment


      • #4
        Ja das ist klar dass das nicht funktioniert Du musst den Modellnamen auch in die GROUP BY Bedingung aufnehmen- sprich ModelID und dann ModelName. Da der auch eindeutig pro ID ist macht das keine Probleme.

        Merke:
        Alle Felder die im SELECT stehen und nicht in einer Aggregatfunktion stehen (COUNT, MAX usw.) MÜSSEN im GROUP BY auftauchen.

        Manche Datenbanken machen sowas zwar automatisch, ich finde es allerdings besser es explizit hinzuschreiben. Für eure DB muss man das wahrscheinlich explizit hinschreiben

        Comment


        • #5
          Hallo,

          zukünftig bitte beachten: Formatierung von SQL in Beiträgen

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X