1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL Abfrage was mache ich falsch dringend

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von fridolin12, 7 November 2010.

  1. fridolin12

    fridolin12 Benutzer

    Fragestellung:

    produkt (ean, bezeichnung, kategorie, ekPreis, listPreis)
    filiale (filNr, inhName, strasse, plz)
    sortiment (filNr, ean, vkPreis, preisRed, bestand)
    kunde (kundeNr, name, bonStufe)
    rechnung (rechnungNr, datum, bezahlt, kundeNr, filNr)
    rechnungPos (rechnungNr, datum, positionNr, ean, einzelPreis, menge)

    Gesucht sind die am besten verkauften Produkte: Geben Sie pro Produktkategorie jendes Produkt aus, das stückmäßig am häufigsten verkauft wurde. Auszugeben sind Kategorie, EAN-Code, verkaufte Stückzahl sowie Umsatz. Sortieren Sie nach Kategorie

    Meine Query:
    Select k1.gebiet
    From kunde k1,auftragskopf ak1,auftragszeile az1
    Where Sum(az1.vkpreis*az1.menge)=(Max((Select k1.gebiet,Sum(az1.vkpreis*az1.menge)
    From kunde k1,auftragskopf ak1,auftragszeile az1
    Where k1.nr=ak1.kunde and ak1.nr=az1.nr
    Group by k1.gebiet)))

    Fehlermeldung:
    Error: Your query has syntax errors.
    Description: java.sql.SQLException: ORA-00934: group function is not allowed here

    Hilfe bitte wo ist mein Fehler
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Lesbar formatiert sieht die Abfrage so aus:

    Code:
    SELECT k1.gebiet
    FROM   kunde k1,
           auftragskopf ak1,
           auftragszeile az1
    WHERE  SUM(az1.vkpreis * az1.menge) = ( Max((SELECT k1.gebiet,
                                                        SUM(az1.vkpreis * az1.menge)
                                                 FROM   kunde k1,
                                                        auftragskopf ak1,
                                                        auftragszeile az1
                                                 WHERE  k1.nr = ak1.kunde
                                                        AND ak1.nr = az1.nr
                                                 GROUP  BY k1.gebiet)) )
    


    Folgendes ist so bzw. an dieser Stelle nicht erlaubt:
    - ... WHERE SUM(az1.vkpreis * az1.menge) = ...
    - ... = ( Max((SELECT k1.gebiet, ...


    Die Abfrage muss in zwei JOINs aufgetrennt werden, dann kann der Vergleich erfolgen.

    Grüße
    Thomas

     
  3. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Danke für die rasche Antwort was meinst du genau mit in zwei Joins aufteilen.
    Könntest du mir das näher erklären?

    Danke im voraus
     
  4. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    ungefähr so ...

    Code:
     SELECT *
       FROM ( SELECT ...., SUM(az1.vkpreis * az1.menge) AS menge     ) summe1
       JOIN ( SELECT MAX(...) ... GROUP ...) max1
         ON summe1.menge = max1.menge
      ...
    
    Ohne Tabellenstrukturen und Testdaten ist es leider schwierig zu sagen, wie es genau aussehen sollte.

    Grüße
    Thomas
     
  5. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    So etwas?

    SELECT *
    FROM
    ( Select k1.gebiet,Sum(az1.vkpreis*az1.menge)
    From kunde k1,auftragskopf ak1,auftragszeile az1
    Where k1.nr=ak1.kunde and ak1.nr=az1.nr
    Group by k1.gebiet, SUM(az1.vkpreis * az1.menge) AS menge ) summe1
    JOIN
    ( SELECT MAX(summe1)From kunde k1 GROUP by k1.gebiet) max1
    ON summe1.menge = max1.menge


    Leider immer noch dieselbe Fehlermeldung
    Group funcition not allowed
     
  6. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Da sind ja auch noch diverse Syntaxfehler drin.
    Mal aus dem Stegreif könnte es ungefähr so gehen...

    Code:
    SELECT *
      FROM   (SELECT k1.gebiet,
                     SUM(az1.vkpreis * az1.menge) AS menge
              FROM   kunde k1,
                     auftragskopf ak1,
                     auftragszeile az1
              WHERE  k1.nr = ak1.kunde
                AND ak1.nr = az1.nr
              GROUP  BY k1.gebiet
             ) summe1
      JOIN (SELECT Max(summe1) AS menge
              FROM   kunde k1
              GROUP  BY k1.gebiet) max1
        ON summe1.menge = max1.menge  
    
    Grüße
    Thomas
     
  7. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Danke für die rasche Rückmeldung mit diesem Code bekomme ich eine andere Fehlermeldung nämlich das SUmme1 nicht zugrefen werden kann warum?

    Error: Your query has syntax errors. Description: java.sql.SQLException: ORA-00904: "SUMME1": invalid identifier
     
  8. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Das bedeutet, dass es die Spalte "summe1" in der Tabelle KUNDE nicht gibt. Was möchtest Du überhaupt an der Stelle abfragen? Ein bißchen mithelfen must Du schon.

    Wenn ich mir die Frage durchlesen, passt Dein bisheriger Ansatz nicht und darauf habe ich mich ein wenig verlassen und nur nach Syntaxfehlern gesucht.

    Grüße
    Thomas
     
  9. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Summe gibt es nicht es ist der Umsatz gefragt preis*menge das ist das große problem!
     
  10. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Danke aber ich habe JA Die richtigen Ansatze den ich habe derzeit habe ich
    RESULT
    Sorry! Your query is not correct. ERROR REPORT
    Error: Incorrect number of tuples! Description: The following columns are missing in the result of your query:

    • EAN
    • UMSATZ
    QUERY RESULT
    STUECK KATEGORIE 7 Pflege 3 Ersatz 4 Audio 16 Sonstiges
     
  11. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Die Originalfrage lauten:

    Da steht nichts von KUNDE drin, nur die Tabellen PRODUKT und RECHNUNGSPOS sind notwendig.

    Gibt es Testdaten zu den Ausgaben? Alles so freihändig rumstochern ist schwierig.

    Grüße
    Thomas
     
  12. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Wie sieht es hiermit aus (könnte immer noch falsch sein, wenn mehrfach die gleiche Menge pro EAN eingekauft wird).

    Code:
    SELECT max.kategorie, max.ean, max.menge AS stueckzahl, max.menge * rp.einzelpreis AS umsatz
      FROM ( SELECT p.kategorie, p.ean, MAX(rp.menge) As menge
               FROM produkt p
               JOIN rechnungpos rp
                 ON rp.ean = p.ean
               GROUP BY p.kategorie, p.ean
           ) max
      JOIN rechnungpos rp
        ON rp.ean = max.ean
       AND rp.menge = max.menge
    ORDER BY max.kategorie, max.ean;
    
    Grüße
    Thomas
     
  13. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Danke So ist es teilweise richtig
    KATEGORIE EAN STUECK UMSATZ

    KATEGORIE EAN STUECK UMSATZ Audio 1-4444-652-8-88 1 4500 Audio 7-2881-760-3-70 1 1300 Ersatz 1-256-7700-2-00 1 2200 Ersatz 2-446-7240-9-15 1 22500


    Brauche aber pro Produktkategorie das mit den meisten stück das ist mein Problem.
    Vielleicht könntest du mir da nich behilflich sein

    mfg fridolin
     
  14. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage was mache ich falsch dringend

    Soll ich nun helfen oder nicht? Ein bißchen mehr Konzentration wäre echt nicht schlecht.

    Also...

    Code:
    SELECT max1.kategorie, ean1.ean, max1.menge AS stueckzahl, max1.menge * ean1.einzelpreis AS umsatz
      FROM ( SELECT p.kategorie, MAX(rp.menge) As menge
               FROM produkt p
               JOIN rechnungpos rp
                 ON rp.ean = p.ean
               GROUP BY p.kategorie
           ) max1
      JOIN ( SELECT p.kategorie, rp.menge, rp.ean, rp.einzelpreis
               FROM produkt p
               JOIN rechnungpos rp
                 ON rp.ean = p.ean
           ) ean1
        ON ean1.kategorie = max1.kategorie
       AND ean1.menge = max1.menge
    ORDER BY max1.kategorie;
    
    Grüße
    Thomas
     
  15. fridolin12

    fridolin12 Benutzer

    AW: SQL Abfrage was mache ich falsch dringend

    Irgendein Fehler ist noch drin aber trotzdem danke für deine größe Mühe und Zeit hoffe ich kann dir bei einen anderen Thema vielleicht auch mal behilflich sein

    mfg fridolin
     
Die Seite wird geladen...

Diese Seite empfehlen