SQLite - Summe aus anderer Tabelle

Marian

Neuer Benutzer
Beiträge
3
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
 
Werbung:
Hallo,
ich habe eine Tabelle (Tabelle1) und eine 2. (Tabelle2).

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


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
 
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?
 
Werbung:
Zurück
Oben