+ Antworten
Ergebnis 1 bis 11 von 11

Thema: SQL, spinnt mein Group By?

  1. #1
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16

    SQL, spinnt mein Group By?

    Hi

    Ich baue sone kleine Intranet-Buchhaltungs Anwendung (ähnlich wie Quicken). Nun möchte ich eine Übersichtsseite, welche mir pro Ausgabenkategorie die Ausgaben angibt. Dabei soll immer alles schön in ein Kästchen pro Konto gepackt werden. Also über einem Kästchen steht dann "Ausgaben für Konto Deutsche Bank: " mit dem Total für alle Ausgaben, für eine bestimmte Kategorie, welche von diesem Konto getätigt wurden. Im Kästchen selber stehen dann die einzelnen Transaktionen. Mit dem Teil im Kästchen habe ich kein Problem, lediglich mit der Titelzeile, welche das Total für alle Transaktionen anzeigen soll. (Dabei sind die Kategorien soweit maximal zweistufig, das heisst es gibt eine Hauptkategorie und n Unterkategorien, aber nur eine Ebene. Die eigene Kategorien ID ist CategoryID, und falls die Kategorie Unterkategorie ist, ist der ParentID Wert != 0).

    Dies gibt mir immer 0 Datensätze zurück, keine Ahnung wieso:
    Code:
    SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
    FROM Transactions AS t
    LEFT JOIN Categories AS c ON t.CategoryID = c.CategoryID
    LEFT JOIN Accounts AS a ON t.AccountID = a.AccountID
    GROUP BY t.accountid
    HAVING c.categoryid =34
    OR c.parentid =34
    Wenn ich das ganze so eingebe:
    Code:
    SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
    FROM Transactions AS t
    LEFT JOIN Categories AS c ON t.CategoryID = c.CategoryID
    LEFT JOIN Accounts AS a ON t.AccountID = a.AccountID
    GROUP BY t.accountid
    HAVING c.categoryid =34
    OR c.parentid =34
    erhalte ich dieses Resultat:
    HTML-Code:
    t_amount, AccountID, a_name, ParentID, UserID, CategoryID
    100	1	Academica	        0	1	34
    100	3	Master Card	0	1	34
    -27.5	3	Master Card	34	1	35
    100	4	Visa	                34	1	35
    Wieso klappt aber das erste (meiner Meinung nach richtige) Statement nicht?

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    1. SQL ist in mySQL case-sensitive (GROUP BY t.accountid)
    2. Alle Ausdrücke in GROUP müssen auch im SELECT vorkommen

    so hast Du im Select a.accountID, gruppierst aber nach t.accountid


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16
    Beide Punkte jetzt beachtet, aber das Resultat ist dasselbe

  4. #4
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    die beiden Queries sind 100prozentig identisch - ehrlich gesagt kann ich dir da nicht ganz folgen

    @Steffen: in MySQL ist groß/kleinschreibung m.E. egal... Ebenso ist MySQL eines der wenigen System, die im GroupBy nicht alle Felder aus dem Select voraussetzten.

  5. #5
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16
    Sorry mein Fehler:

    Das eine Query (das eben diesen Output generierte), hat als GroupBy:

    c.CategoryID, t.AccountID

  6. #6
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Hi Jan,

    das mit der Gross/Kleinschreibung hab ich erst kürzlich festgestellt, hier funktionierten Feldzuweisungen nicht wegen falscher Schreibweise, vll ist das neu in Version 5?
    http://dev.mysql.com/doc/refman/5.0/...nsitivity.html

    Zum GroupBy hatte ich schon öfters Fehlermeldung, wenn das nicht im Select vorkommt, habe nichts eindeutiges in der Doku finden können (alle Beispiele erfüllen das aber)


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  7. #7
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16
    Weiss da niemand ne Lösung? Ich komm echt nicht weiter! Das komische ist: Wenn ich das ganze Statement, das Probleme macht so schreibe:
    Code:
    SELECT t.Amount AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
    FROM Transactions AS t
    INNER JOIN Categories AS c ON t.CategoryID = c.CategoryID
    INNER JOIN Accounts AS a ON t.AccountID = a.AccountID
    INNER JOIN AccountType AS at ON a.AccountTypeID = at.AccountTypeID
    WHERE a.UserID =1
    AND (
    c.CategoryID =35
    OR c.ParentID =35
    )
    ORDER BY at.Position
    LIMIT 0 , 30
    gibt es folgenden Output:

    HTML-Code:
    t_amount	AccountID	a_name	ParentID	UserID	CategoryID
    -27	3	Master Card	34	1	35
    100	4	Visa	                34	1	35
    So:

    Code:
    SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
    FROM Transactions AS t
    INNER JOIN Categories AS c ON t.CategoryID = c.CategoryID
    INNER JOIN Accounts AS a ON t.AccountID = a.AccountID
    INNER JOIN AccountType AS at ON a.AccountTypeID = at.AccountTypeID
    GROUP BY a.AccountID
    HAVING a.UserID =1
    AND (
    c.CategoryID =35
    OR c.ParentID =35
    )
    ORDER BY at.Position
    LIMIT 0 , 30
    gibt es aber nix! Wieso?!?

  8. #8
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    OR c.ParentID =34 ?

    In solchen Fällen nehm ich der Reihe nach Ausdrücke weg um die Ursache zu finden.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  9. #9
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16
    Ne das mit der parentid stimmt so. ja hab ich auch, es gibt erst probleme ab dem das group by dabei ist, vorher nicht!

  10. #10
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    hast Du mal statt HAVING WHERE probiert?


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  11. #11
    TP-Junior MichiZH macht alles soweit korrekt
    Registriert seit
    Apr 2008
    Beiträge
    16
    ja mit where geht gar nichts. das komische ist, dass es nur bei categoryid=34 und 35 nicht funzt. wieso weiss ich aber nicht, bei den anderen gehts.

+ Antworten

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51