SQLite - Werte aus verschiedenen Tabellen zusammenrechnen

  • Antworten:12
  • Bentwortet
Tanja Z.
  • Forum-Beiträge: 52

24.02.2012, 18:28:59 via Website

Hallole!

Bin gerade am Verzweifeln, versuche seit Stunden eine Abfrage zustande zu kriegen, die Werte aus verschiedenen Tabellen zusammenrechnet.:*) Verknüpft werden soll diese durch eine gemeinsame Id, diese wird jedoch ignoriert und die Werte aller Zeilen addiert.

Weiß jemand, woran das liegt, was mache ich falsch?

LG Tanja

— geändert am 24.02.2012, 21:53:44

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

24.02.2012, 19:25:20 via Website

Weiß jemand, woran das liegt, was mache ich falsch?

Wenn du nicht schreibst was du machst, dann kann dir auch keiner sagen was du vielleicht falsch machst :bashful:

Zeig mal die Tabellen und was du da wie zusammengerechnet haben willst.

Antworten
Tanja Z.
  • Forum-Beiträge: 52

24.02.2012, 19:55:02 via Website

Wenn du nicht schreibst was du machst, dann kann dir auch keiner sagen was du vielleicht falsch machst

:grin:

Ja ist wirklich sinnnvoll, ihre Beiträge nochmals durchzulesen, bevor frau sie speichert! Sorry!!

table1
_id
common_id
wert1

table2
_id
common_id
wert2

table3
_id
common_id
wert3

Die common-id soll der gemeinsame Schlüssel sein, die Werte sollen addiert werden.
Das war der letzte Versuch:

SELECT
table1._id,
table1.wert1 +
table2.wert2+
table3.wert3
FROM
table1
INNER JOIN table1 ON table1.common_id=table2.common_id
INNER JOIN table2 ON table1.common_id=table3.common_id

LG Tanja

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

24.02.2012, 21:53:35 via Website

Mal abgesehen, dass du im ersten Join table1 versuchst mit sich selbst zu joinen, dazu aber werte aus table2 heranziehst (oder ist das nur ein Tippfehler?) - kann denn die CommonId in jeder der Tabellen nur einmal vorkommen?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

24.02.2012, 22:01:31 via Website

Hm, kann es sein das deine Ergebnisse zu groß werden, weil common_id in den einzelnen Tabellen jeweils mehrfach vorkommen?
In dem Fall würde sql dir nämlich alle Permutationen von passenden Einträgen liefern.

Antworten
Tanja Z.
  • Forum-Beiträge: 52

24.02.2012, 22:24:18 via Website

@Thomas M
Mal abgesehen, dass du im ersten Join table1 versuchst mit sich selbst zu joinen, dazu aber werte aus table2 heranziehst (oder ist das nur ein Tippfehler?) - kann denn die CommonId in jeder der Tabellen nur einmal vorkommen?

Ja, ist ein Tippfehler! Die CommonId kann mehrmals vorkommen.

@and dev

Hm, kann es sein das deine Ergebnisse zu groß werden, weil common_id in den einzelnen Tabellen jeweils mehrfach vorkommen?
In dem Fall würde sql dir nämlich alle Permutationen von passenden Einträgen liefern.

Antwort wie oben, wie müsste denn die Abfrage lauten? Die Bücher, die ich habe, liefern mir keine passenden Antworten.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

24.02.2012, 22:31:25 via Website

Grob aus aus dem Handgelenk:

select common_id, sum(x) from (
select common_id, sum(wert1) as x from tabelle1 group by common_id
union
select common_id, sum(wert2) as x from tabelle2 group by common_id
union
select common_id, sum(wert3) as x from tabelle3 group by common_id
)
group by common_id

Tanja Z.

Antworten
Gelöschter Account
  • Forum-Beiträge: 24

25.02.2012, 11:45:11 via Website

Darf ich kurz das Datenbankmodell hinterfragen? Die drei Tabellen sehen mit ihrem identischen Design wie Dimension Tables aus - aber es gibt keine Facts Table (sonst hättest Du mit einer Facts gejoined)?

Kann es sein das alle drei Tabellen jeweils ein MischMasch aus Dimensions und Facts darstellen? Wenn ja, dann würde ich das trennen. Wenn nein, würde ich die drei zusammenführen ...

Antworten
reiti.net
  • Forum-Beiträge: 339

25.02.2012, 12:16:11 via Website

die union methode weiter oben sollte das sein, was du suchst..

generell würde ich mir aber die frage stellen ob du die 3 tabellen nicht zu einer zusammenfassen kannst ;-)

Antworten
Tanja Z.
  • Forum-Beiträge: 52

27.02.2012, 16:09:20 via Website

Hallo!

Vielen Dank für Eure Antworten!

Die Lösung von And dev hat funktioniert und hab die auch so übernommen. Vielen Dank!

Die Tabellen hätte man sicherlich zusammenfassen können, fände ich aber nicht so schön, weil es dann auch sehr unübersichtlich wäre.

LG Tanja

— geändert am 27.02.2012, 18:12:03

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

27.02.2012, 19:12:15 via Website

weil es dann auch sehr unübersichtlich wäre
Ich würde ja gerade bei einer mobilen App eher auf Performance achten, aber das musst du natürlich selber wissen;
lange Antwortzeiten (aufgrund komplexer Queries) sind nicht nur lästig, sondern saugen auch entsprechend am Akku :huh:

Wenn die Struktur so bleiben soll, dann empfiehlt sich vielleicht einen Index auf die common_id Felder zu setzen.

Antworten
Tanja Z.
  • Forum-Beiträge: 52

27.02.2012, 20:39:10 via Website

lange Antwortzeiten (aufgrund komplexer Queries) sind nicht nur lästig, sondern saugen auch entsprechend am Akku

Da hast Du natürlich recht, in dem Fall sind es jedoch max. 50 Datensätze!

LG Tanja

Antworten
Klaus T.
  • Forum-Beiträge: 8.183

27.02.2012, 22:13:06 via App

Gutes Datenbankdesign fängt schon im Kleinen an....

if all else fails, read the instructions.

Antworten