Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Summenabfrage zweier Tabellen

  1. #1
    colin ist offline Neuer Benutzer
    Registriert seit
    20.10.2011
    Beiträge
    10

    Standard Summenabfrage zweier Tabellen

    Hallo zusammen,


    ich habe versucht mein Problem hiermit zu lösen: http://www.pg-forum.de/sql/2267-join-und-sum.html

    leider klappt das irgendwie nicht so richtig. In meinem Fall habe ich 2 Tabellen mit Datumsanzeige.
    Von einem Tag will ich die Summe von einer Spalte haben.

    Meine Tabelle sieht wie folgt aus:

    Heizung1:

    id temp date
    1 1 2011-01-01
    2 1 2011-01-01
    3 1 2011-01-02



    Heizung 2:


    id temp date
    1 1 2011-01-01
    2 1 2011-01-01
    3 1 2011-01-02




    Mein Code sieht wie folgt aus:

    Code:
    SELECT 
      sum("Heizung2"."Temp")+sum("Heizung1"."Temp"),
      "Heizung1".date1
    FROM 
      public."Heizung1" LEFT JOIN public."Heizung2" ON "Heizung1".date = "Heizung2".date
    GROUP BY
      "Heizung1".date,
      "Heizung1"."Temp"
    Leider kommt als Summe nur Mist raus! Die Zahlen sind völlig willkürlich gewählt und die
    Logik erstmal aussen vor gelassen! Ich muss erstmal verstehen, was Sql genau macht!
    Wo habe ich den fehler? kann mir jemand erklären, warum da nur Mist rauskommt?
    Als Summe kommt meist mehr als die doppelte Summe raus!

    date | 8
    -------------------
    2011-01-01 | 2
    2011-01-02 | 8

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von colin Beitrag anzeigen
    Hallo zusammen,


    ich habe versucht mein Problem hiermit zu lösen: http://www.pg-forum.de/sql/2267-join-und-sum.html

    leider klappt das irgendwie nicht so richtig. In meinem Fall habe ich 2 Tabellen mit Datumsanzeige.
    Von einem Tag will ich die Summe von einer Spalte haben.

    Meine Tabelle sieht wie folgt aus:

    Heizung1:

    id temp date
    1 1 2011-01-01
    2 1 2011-01-01
    3 1 2011-01-02



    Heizung 2:


    id temp date
    1 1 2011-01-01
    2 1 2011-01-01
    3 1 2011-01-02




    Mein Code sieht wie folgt aus:

    Code:
    SELECT 
      sum("Heizung2"."Temp")+sum("Heizung1"."Temp"),
      "Heizung1".date1
    FROM 
      public."Heizung1" LEFT JOIN public."Heizung2" ON "Heizung1".date = "Heizung2".date
    GROUP BY
      "Heizung1".date,
      "Heizung1"."Temp"
    Leider kommt als Summe nur Mist raus! Die Zahlen sind völlig willkürlich gewählt und die
    Logik erstmal aussen vor gelassen! Ich muss erstmal verstehen, was Sql genau macht!
    Wo habe ich den fehler? kann mir jemand erklären, warum da nur Mist rauskommt?
    Als Summe kommt meist mehr als die doppelte Summe raus!

    date | 8
    -------------------
    2011-01-01 | 2
    2011-01-02 | 8
    Schau Dir mal an, was hier passieret:

    Code:
    test=*# select * from h1;
     id | temp |   datum
    ----+------+------------
      1 |    1 | 2011-01-01
      2 |    1 | 2011-01-01
      3 |    1 | 2011-01-02
    (3 rows)
    
    Time: 0,245 ms
    test=*# select * from h2;
     id | temp |   datum
    ----+------+------------
      1 |    1 | 2011-01-01
      2 |    1 | 2011-01-01
      3 |    1 | 2011-01-02
    (3 rows)
    
    Time: 0,248 ms
    test=*# select h1.*, h2.* from h1 left join h2 on (h1.datum=h2.datum);
     id | temp |   datum    | id | temp |   datum
    ----+------+------------+----+------+------------
      1 |    1 | 2011-01-01 |  1 |    1 | 2011-01-01
      1 |    1 | 2011-01-01 |  2 |    1 | 2011-01-01
      2 |    1 | 2011-01-01 |  1 |    1 | 2011-01-01
      2 |    1 | 2011-01-01 |  2 |    1 | 2011-01-01
      3 |    1 | 2011-01-02 |  3 |    1 | 2011-01-02
    (5 rows)
    Vielleicht überdenkst Du einfach mal was Du willst. Ein JOIN über das Datum führt recht sicher nicht zum Ziel. Allerdings hab ich auch nicht recht verstanden, was Du genau willst.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    colin ist offline Neuer Benutzer
    Registriert seit
    20.10.2011
    Beiträge
    10

    Standard

    Als Ergebniss sollte nach meiner Überlegung rauskommen.

    2011-01-01 4
    2011-01-01 2

    Die Summe von Temp am tag 2011-01-01 und die Summe
    von Temp am Tag 2011-01-02. So soll es am Ende aussehen.


    test=*# select h1.*, h2.* from h1 left join h2 on (h1.datum=h2.datum);
    id | temp | datum | id | temp | datum
    ----+------+------------+----+------+------------
    1 | 1 | 2011-01-01 | 1 | 1 | 2011-01-01
    1 | 1 | 2011-01-01 | 2 | 1 | 2011-01-01
    2 | 1 | 2011-01-01 | 1 | 1 | 2011-01-01
    2 | 1 | 2011-01-01 | 2 | 1 | 2011-01-01
    3 | 1 | 2011-01-02 | 3 | 1 | 2011-01-02
    (5 rows)
    Wenn ich mir das genauer betrachte, dann merke ich, das ist JOIN
    total falsch verstehe. Jetzt weiß ich auch, wie meine Ergebnisse
    zustande kommen. Danke! Schon mal kapiert. Join vergleicht alle
    ID mit Temp und listet diese auf. Wie kann ich jetzt die Gesamt
    summe von Temp berechnen? Hier wäre join schon mal fehl am Platz,
    richtig?

    Und übrigens, dieses h1 und ha2 will mein postgre einfach nicht
    machen, da die Tabelle nicht existiert!?

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von colin Beitrag anzeigen
    Als Ergebniss sollte nach meiner Überlegung rauskommen.

    2011-01-01 4
    2011-01-01 2

    Die Summe von Temp am tag 2011-01-01 und die Summe
    von Temp am Tag 2011-01-02. So soll es am Ende aussehen.


    Wenn ich mir das genauer betrachte, dann merke ich, das ist JOIN
    total falsch verstehe. Jetzt weiß ich auch, wie meine Ergebnisse
    zustande kommen. Danke! Schon mal kapiert. Join vergleicht alle
    ID mit Temp und listet diese auf. Wie kann ich jetzt die Gesamt
    summe von Temp berechnen? Hier wäre join schon mal fehl am Platz,
    richtig?

    Und übrigens, dieses h1 und ha2 will mein postgre einfach nicht
    machen, da die Tabelle nicht existiert!?
    Aha, also so was wie hier?:

    Code:
    test=# select datum, sum(temp) from (select temp, datum from h1 union all select temp, datum from h2) foo group by datum;
       datum    | sum
    ------------+-----
     2011-01-01 |   4
     2011-01-02 |   2
    (2 rows)
    Als wirklich sinnvoll halte ich dies zwar nicht, aber scheinbar willst Du das so. Ach ja: meine Tabellen heißen bei mir anders als bei Dir. Das SQL für Deine Tabellenname anzupassen überlasse ich Dir mal zur Übung ;-)


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    colin ist offline Neuer Benutzer
    Registriert seit
    20.10.2011
    Beiträge
    10

    Standard

    Danke Andreas, genau das wollte ich Ist also doch verschachtelter als ich dachte.

    Warum nicht sinnvoll? Die Summe aller Temperaturen von verschiedenen Räumen und
    Uhrzeiten von einem Tag? Das wurde mir nämlich aufgebrummt

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von colin Beitrag anzeigen
    Danke Andreas, genau das wollte ich Ist also doch verschachtelter als ich dachte.

    Warum nicht sinnvoll? Die Summe aller Temperaturen von verschiedenen Räumen und
    Uhrzeiten von einem Tag? Das wurde mir nämlich aufgebrummt
    Warum steht das dann in 2 Tabellen?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    colin ist offline Neuer Benutzer
    Registriert seit
    20.10.2011
    Beiträge
    10

    Standard

    Man will nur die Gesamtsumme aller Temperaturen von verschiedenen Heizungen nur von einem Tag. Von welchem Raum und so weiter spielt keine Rolle. Das ganze soll am Ende über einen Report nach einem Monat in einem Diagramm dargestellt werden.

    Eigentlich genial wie du das gemacht hast, das macht Sinn und ist mir nicht in den Sinn gekommen Das schafft man sicher durch Erfahrungen. Vielen Dank Andreas

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von colin Beitrag anzeigen
    Man will nur die Gesamtsumme aller Temperaturen von verschiedenen Heizungen nur von einem Tag. Von welchem Raum und so weiter spielt keine Rolle. Das ganze soll am Ende über einen Report nach einem Monat in einem Diagramm dargestellt werden.
    Das beantwortet nicht meine Frage.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    colin ist offline Neuer Benutzer
    Registriert seit
    20.10.2011
    Beiträge
    10

    Standard

    Ich musst erstmal überlegen, was genau du hören willst. Ich erkläre das mal so. Es besteht bereits eine Datenbank, in die Datenbank fließen verschiedene Messwerte von verschiedenen Heizungen ein. Jede Heizung hat eine Tabelle zugewiesen bekommen. Mein Problem war nur ein Bruchteil für Testzwecke geeignet, da es zuviele Messwerte gibt. Verstehst du jetzt?
    Geändert von colin (20.10.2011 um 17:15 Uhr)

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von colin Beitrag anzeigen
    IJede Heizung hat eine Tabelle zugewiesen bekommen. Verstehst du jetzt?
    Ja, es ist das, was ich befürchtet hatte: falsches DB-Design. Deine Datenbank skaliert nicht, wenn eine weitere Meßstelle dazukommt.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 11.06.2011, 14:34
  2. Problem Ergebnis zweier Spalten in einer ausgeben
    Von strippenzieher im Forum Allgemeines
    Antworten: 3
    Letzter Beitrag: 08.04.2011, 22:41
  3. SQL Vergleich zweier Tabellen
    Von Negi im Forum SQL
    Antworten: 1
    Letzter Beitrag: 05.07.2010, 17:51
  4. Problem SQL-Anfänger: Abfrage mittels zweier Tabellen?
    Von klitze2 im Forum SQL
    Antworten: 7
    Letzter Beitrag: 19.06.2008, 13:29
  5. Vergleich zweier Tabellen
    Von mentor im Forum SQL
    Antworten: 2
    Letzter Beitrag: 20.07.2007, 19:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum