Summieren in Abfrage

Martin.R

Benutzer
Beiträge
10
Hallo ich bin neu und hab mal ne Frage.

Ich versuche aus einer Datenbank mit drei Spalten zu filtern und die Stückzahlen zu summieren. Es soll summiert werden wenn Behälter und Lieferschein mehrfach in der Tabelle vorkommen.

Spalten: Behälter | Lieferschein | Behälter- Stück

Abfrage: Select Behälter, Lieferschein, sum(Behälter-Stück) From Kontoauszug Where Behälter & Lieferschein

Wo habe ich meine Denkfehler?
Die Summe die dabei raus kommt ändert sich mit jeder neuen Abfrage und ist definitiv falsch.

Vielen Dank im Voraus!
 
Werbung:
Code:
postgres=# create table martinr (behaelter int, lieferschein int, anzahl int);
CREATE TABLE
postgres=# insert into martinr values (1,1,10);
INSERT 0 1
postgres=# insert into martinr values (1,1,20);
INSERT 0 1
postgres=# insert into martinr values (1,2,30);
INSERT 0 1
postgres=# insert into martinr values (3,3,40);
INSERT 0 1
postgres=# select behaelter, lieferschein, sum(anzahl) from martinr group by behaelter, lieferschein;
 behaelter | lieferschein | sum 
-----------+--------------+-----
         1 |            1 |  30
         3 |            3 |  40
         1 |            2 |  30
(3 rows)

postgres=#

Zeige nachvollziehbar, was Du hast, was Du willst, was Du tust und was passiert.
 
Hallo, ich habe es in Excel mal zusammengefasst welche Daten summiert werden sollten.
1669661510441.png

Aktuell arbeite ich mit folgender Abfrage:

SELECT Lieferschein, Behälter_id, Stück FROM Kontoauszug where Lieferschein & Behälter_ID

Diese gibt mir in Python eine Liste mit den einzelnen Lieferscheinen, Behälter_ID und Stückzahl zurück aber zusammengerechnet bekomme ich diese nicht!🥲

Ich erwarte allerdings von meiner Abfrage, dass diese mir zurück gibt!:

Lieferschein | Behälter_ID | Stück
14543819 | 3101208 | 7
 
Da kommt folgendes bei raus:

('3101208', '14543819', 238)

Abfrage:
SELECT Behälter_id, Lieferschein, sum(Stück) FROM Kontoauszug group by Behälter_id, Lieferschein


????????????????????
 
Wenn da als Summe 238 raus kommt, dann wirst Du wohl ein paar mehr Datensätze haben, als in Deinem Screenshot zu sehen ist.

Wenn wirklich nur die Datensätze in der Tabelle sind, die im Screenshot zu sehen sind, dann würde auch 7 rauskommen:

 
Mit der Lieferscheinnummer ja, aber nicht mit der Behälternummer.
Wenn die Daten so aussehen wie in Deinem zweiten Screenshot, dann kann da nicht nur ein Datensatz als Resultat des GROUP BY herauskommen.

Aber noch eine andere Frage: Was erwartest Du von dieser Bedingung:
Where Behälter & Lieferschein
Das & Zeichen hat im SQL Standard eigentlich keine Bedeutung, in SQLite ist es allerdings ein Bit-weises UND. Also entspricht der Ausdruck 7 & 3 binär den Werten: 0111 & 0011 was 0011 ergibt - also die Zahl 3.

Allerdings ist WHERE 3 dann auch keine korrekte WHERE Bedingung in (Standard) SQL. Vermutlich mach SQLite den gleichen Blödsinn, wie MySQL, dass jeder Wert "irgendwie" also Bool'scher Wert verwendet werden kann. 0 wird als "falsch" angesehen und alles was ungleich 0 als "wahr". Mit Deinen Beispieldaten ist Where Behälter & Lieferschein vermutlich immer "wahr" und die WHERE Bedingung schränkt eigentlich gar nicht ein.
 
Erwartet hatte ich das wenn Lieferschein und Behälter ID mehrfach gleich dann Stückzahl zählen.
Aber ich hatte jetzt zwischenzeitlich die Abfrage von akretschmer verwendet und trotz alledem habe ich 238 statt 7.
 
Werbung:
Zurück
Oben