Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQLite - Summe aus anderer Tabelle

Dieses Thema im Forum "SQLite" wurde erstellt von Marian, 2 Juli 2013.

  1. Marian

    Marian Neuer Benutzer

    Hallo,
    ich habe eine Tabelle (Tabelle1) und eine 2. (Tabelle2).
    Tabelle1 hat eine Spalte ID und eine Spalte Name und einige andere unwichtige (für diese Abfrage). Tabelle2 hat 2 hierfür wichtige Spalten, Tabelle1ID und Zahl. Ja, in Tabelle2 sind Wert zu den Zeilen in Tabelle1, diese werden über Tabelle1ID zu Tabelle1 der Spalte ID zugewiesen.
    Jetzt möchte ich, dass ich über eine Abfrage aus Tabelle1 Name bekomme und die Summe der Zahlen aus allen Zeilen in Tabelle2, die die Tabelle1ID wie die Spalte ID aus Tabelle1 haben. Das sollen höchstens 15 Werte sein (LIMIT 0,14) und nach der Summe sortiert sein (ORDER BY …)
    Beispiel:

    Tabelle1:
    ID - Name
    • 1 - Name1
    • 3 - Name2
    • 4 - Name3
    Tabelle2:
    Tabelle1ID - Zahl
    • 3 - 20
    • 1 - 10
    • 1 - 15
    • 3 - 20
    • 4 - 30
    • 1 - 15
    • 3 - 50
    • 4 - 15
    Die Ergebnisse sollten dann sein:
    ID - SUM(Zahl)
    • Name2 - 90
    • Name3 - 45
    • Name1 - 40
    Ich habe es mit folgender Abfrage versucht:
    SELECT Tabelle1.Name, SUM(Tabelle2.Zahl) FROM Tabelle1, Tabelle2 WHERE Tabelle2.Tabelle1ID = Tabelle1.ID ORDER BY SUM(Tabelle2.Zahl) LIMIT 0,14

    Aber das Ergebnis ist:
    Name, SUM(Tabelle2.Zahl)
    • Name3, 175
    Kann mir jemand sagen, wie das funktionieren könnte?
    Danke, Marian
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Dir fehlt ein GROUP BY, eigentlich sollte das Dir die DB auch sagen. Das, was Du zeigst, ist meiner Meinung nach ein echter Bug von SQLite.

    Code:
    test=*# copy t1 from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1    name1
    >> 2    name2
    >> 3    name3
    >> \.
    Time: 17607,809 ms
    test=*# create table t2 (id1 int references t1, zahl int);
    CREATE TABLE
    Time: 76,265 ms
    test=*# copy t2 from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 2    20
    >> 1    10
    >> 1    15
    >> 2    20
    >> 3    30
    >> 1    15
    >> 2    50
    >> 3    15
    >> \.
    Time: 25448,146 ms
    test=*# select t1.name, sum(t2.zahl) from t1 left join t2 on t1.id=t2.id1 group by t1.id order by t1.id;
     name  | sum
    -------+-----
     name1 |  40
     name2 |  90
     name3 |  45
    (3 rows)
    
    Time: 23,036 ms
    
    Ohne GROUP BY sollte die DB wie folgt reagieren:

    Code:
    test=*# select t1.name, sum(t2.zahl) from t1 left join t2 on t1.id=t2.id1 order by t1.id;
    ERROR:  column "t1.name" must appear in the GROUP BY clause or be used in an aggregate function
    LINE 1: select t1.name, sum(t2.zahl) from t1 left join t2 on t1.id=t...
                   ^
    Time: 0,247 ms
    
     
  3. Marian

    Marian Neuer Benutzer

    Nein, bei mir kam immer No Error. Liegt vielleicht daran, dass das nur ein kleines SQLite-Browser-Programm ist, und ich SQLite in Java durch JDBC implementiere.
    Kannst du mir vielleicht sagen, wofür ich das GROUP BY noch brauche, und wie?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Siehe mein Beitrag...
     
  5. Marian

    Marian Neuer Benutzer

    Oh, entschuldigung, jetzt sehe ich das erst. Danke!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden