Hilfe: Werte sind alle x2 (oder mehr) nach JOIN

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

in meiner GUI sind mir eben sehr merkwürdige Werte aufgefallen ...
Nach kurzem Suchen stellte sich herraus, das das SQL Query wohl irgendwo nicht ganz richtig ist :-/
Ich hoffe das mir jemand von euch helfen kann, denn ich verstehe die welt nicht mehr ;)

In meiner Tabelle sind für jeden einzelnen Tag (als Timestamp) Werte zu Objekten gespeichert.
Diese Objekte sind in Gruppen zusammengefasst die dann die Gesamt Werte anzeigen sollen.

Mache ich nun folgende Abfrage:
Code:
SELECT gruppe.name, SUM(objekt.klicks) 
FROM gruppe 
LEFT JOIN objekt ON gruppe.gruppen_id = objekt.gruppen_id 
WHERE objekt.day BETWEEN 1193871600 AND 1193957999 
GROUP BY objekt.gruppen_id

Bekomme ich 3 Datensätze zurück (ist, korrekt - ich habe 3 Gruppen). Allerdings sind die Werte der auf summierten Clicks falsch, nämlich in diesem Fall x2.

Setze ich un folgendes Statement ab:
Code:
SELECT SUM(objekt.clicks) 
FROM objekt 
WHERE objekt.day BETWEEN 1193871600 AND 1193957999 
GROUP BY objekt.gruppen_id

Bekomme ich wieder 3 datensätze, diesmal allerdings mit den richtigen Werten ...

Kann mir vllt. jemand erklären/helfen/sagen warum dieses Problem auftaucht und wie man es umgeht?!

Vielen lieben Dank schonmal im Vorraus!
 
S

SlaterB

Gast
wie siehst mit einfachen Aufsummierungen ohne Group By aus?

SELECT SUM(objekt.clicks)
FROM objekt
vs

SELECT SUM(objekt.klicks)
FROM gruppe
LEFT JOIN objekt ON gruppe.gruppen_id = objekt.gruppen_id


---------

und generell:
verkürze die Tabellen auf jeweils wenige Gruppen/ wenige Elemente
und lasse dir die gejointe Tabelle ohne Select oder Group By komplett ausgeben,
wieviele Spalten, wieviele Clicks?
 

The_S

Top Contributor
Wie ist denn deine Tabellen aufgebaut? Und du bist dir sicher, dass das hier

Code:
SELECT gruppe.name, SUM(objekt.klicks)
FROM gruppe
LEFT JOIN objekt ON gruppe.gruppen_id = objekt.gruppen_id
WHERE objekt.day BETWEEN 1193871600 AND 1193957999
GROUP BY objekt.gruppen_id

geht? Ich hätte ma gesagt, dass muss korrekt so heißen

Code:
SELECT gruppe.name, SUM(objekt.klicks)
FROM gruppe
LEFT JOIN objekt ON gruppe.gruppen_id = objekt.gruppen_id AND objekt.day BETWEEN 1193871600 AND 1193957999
GROUP BY gruppe.name

Voraussetzung natürlich, dass gruppen_id eindeutig ist.
 
G

Guest

Gast
Hobbit_Im_Blutrausch hat gesagt.:
geht? Ich hätte ma gesagt, dass muss korrekt so heißen

Code:
SELECT gruppe.name, SUM(objekt.klicks)
FROM gruppe
LEFT JOIN objekt ON gruppe.gruppen_id = objekt.gruppen_id AND objekt.day BETWEEN 1193871600 AND 1193957999
GROUP BY gruppe.name

Voraussetzung natürlich, dass gruppen_id eindeutig ist.

gruppen_id ist überall eindeutig. Der Code geht sowohl mit dem WHERE als auch mit dem AND dahinter.
Machte de fakto gerade keinen Unterschied sprich -> auch hier waren die Werte doppelt.

@SlaterB
Die SUM Funktion klappt nicht ohne GROUP BY - lasse ich das JOIN weg und mache dann in der tabelle ein GROUP BY über die GRUPPEN_ID, bekomme ich die richtigen Werte, wie ich ja oben schon geschrieben hatte ...
 

The_S

Top Contributor
Mein Augenmerk lag auch nicht wirklich auf der Where-Klausel, sondern vielmehr darin, dass du gruppen.name selektierst, aber nach objekt.gruppen_id gruppierst. Sollte imho eine SQL-Exception geben ...
 
G

Guest

Gast
ahhso, das hatte ich eben glatt übersehen in deinem code ... :-/
läuft allerdings problemlos ohne irgendwelche exceptions bei mir.
 

The_S

Top Contributor
Versuch das mal

Code:
WITH objSq as (
	SELECT gruppen_id, SUM(klicks) klicks
	FROM objekt
	WHERE day BETWEEN 1193871600 AND 1193957999
	GROUP BY gruppen_id
)
SELECT gruppe.name, objSq.klicks 
FROM gruppe
LEFT JOIN objSq ON gruppe.gruppen_id = objSq.gruppen_id
 
G

Guest

Gast
hmm da bekomm ich sofort den Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WITH objSq as ( ...
 

The_S

Top Contributor
OK, dann hat MySQL da scheinbar eine andere Syntax. Mal gucken ob ich ein Äquivalent dazu für MySQL finde.
 

The_S

Top Contributor
Also scheinbar gibts sowas in MySQL nicht. Müsstest dir ne Temporäre Tabelle anlegen, in der du bereits die betreffenden gruppen_ids der Tabelle Objekt gruppierst und die klicks aufsummierst. Und diese Temporäre Tabelle joints du dann deiner gruppen-tabelle.

Könnte auch sein, dass es noch was einfacheres in MySQL gibt, aber ich hab jetzt auf die Schnelle nichts gefunden und bin so auch net wirklich n MySQL-Fan ;) .
 
G

Guest

Gast
hmm ok, danke ;-)
allerdings frage ich mich wieso er die werte da x2 genommen ausgibt :-/
 

The_S

Top Contributor
Naja, weil du die Tabelle objekt jointst. Diese Tabelle kann aber eine gruppen_id zweimal haben. Dadurch bekommst du mehrere Datensätze. Und das Group By bezieht sich nicht schon auf den Join selbst, sondern auf die bereits gejointen tabellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Edin JDBC Hilfe Datenbankprogrammierung 2
B MySQL Umkreissuche - brauche Hilfe bei SQL Statement Datenbankprogrammierung 12
I Hilfe zu Multidimensionalen Datenbanken Datenbankprogrammierung 1
J Brauche Hilfe bei meinem Programm ! Datenbankprogrammierung 12
M SQL-Statement Hilfe bei SQL-Abfrage Datenbankprogrammierung 2
H Brauche Hilfe beim Mappen von 3 Tabellen a 1:n mit hbm.xml. Datenbankprogrammierung 34
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
N Hilfe bei Projekt Datenbankprogrammierung 4
MrSnake Hilfe bei erstellen einer DB Datenbankprogrammierung 12
F Brauche dringend Hilfe Java-Access Connection Datenbankprogrammierung 3
U PostgreSQL Hilfe bei Statementsyntax Datenbankprogrammierung 2
M SQL UPDATE richtig anwenden BITTE um HILFE Datenbankprogrammierung 3
M Hilfe bei grundlegendem Ansatz Datenbankprogrammierung 2
M Bitte um Hilfe bei Wahl einer Datenbank Datenbankprogrammierung 3
M hilfe zur einer Exception Datenbankprogrammierung 2
G Hilfe um String an Datenbank zu schicken Datenbankprogrammierung 3
J brauche HILFE: java.lang.NoSuchMethodError: calculateSecurityWarningPosition Datenbankprogrammierung 2
E Dringend Hilfe Firebird/Jaybird verbindet nicht; im jar file Datenbankprogrammierung 4
S Benötige Hilfe mit DB Treiber Datenbankprogrammierung 4
P Benötige etwas Hilfe bei Datanbankabfrage über Java Datenbankprogrammierung 3
M Hilfe -Access mag sein Replace nciht merh Datenbankprogrammierung 2
M Hilfe - keine Connection zur DB Datenbankprogrammierung 4
M ORA-00911: invalid character . Hilfe! Datenbankprogrammierung 10
N Hilfe ! Mein Applet bekommt ein Access-Denied von MySQL Datenbankprogrammierung 7
I Hilfe bei umstellung. Datenbankprogrammierung 2
K Hilfe bei SQL-abfrage Datenbankprogrammierung 7
R Hilfe! Negative Zeitangabe Datenbankprogrammierung 2
I hilfe! java.sql.SQLException Datenbankprogrammierung 7
B Hilfe! Problem bei Verbindung über JDBC/ODBC Datenbankprogrammierung 4
D Brauche hilfe bei Delete mit Datum! Datenbankprogrammierung 4
T HILFE: MySQL und tomcat-5.5.4 == Name jdbc is not bound in t Datenbankprogrammierung 3
R Hilfe mit Umlauten und MSSQL Datenbankprogrammierung 10
G Hilfe bei Query für Spaltenansicht. Datenbankprogrammierung 20
6 Hilfe beim Einstieg Datenbankprogrammierung 15
D brauche mal kurz hilfe bei einem select-stmt Datenbankprogrammierung 6
M hilfe, wo bekomme ich Lektüre her? Datenbankprogrammierung 4
Ataria SQLite Werte aus zwei Tabellen zusammenführen Datenbankprogrammierung 8
J Mehrere WHERE Werte benutzen Datenbankprogrammierung 2
P Null Werte bei der Normalisierung Datenbankprogrammierung 2
J keine Werte vom PHP Datenbankprogrammierung 3
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
E Wie kann man in DB2 TIMESTAMP Werte hinzufügen? Datenbankprogrammierung 2
OnDemand SQL Query Anzahl der Werte Datenbankprogrammierung 8
ruutaiokwu sql server werte swappen beim update-vorgang mit unique-constraints..? Datenbankprogrammierung 2
S MySQL Nach wiederholtem Update falsche Werte (im Speicher?) Datenbankprogrammierung 1
L Werte in Datei speichern Datenbankprogrammierung 16
H MySQL Werte eines Datensatzes in einen anderen kopieren Datenbankprogrammierung 2
J Access Datenbank mit JAVA erstellen - boolean Werte Datenbankprogrammierung 4
E Werte auslesen Datenbankprogrammierung 3
D Alle Werte aus DB auslesen und in Chart darstellen Datenbankprogrammierung 6
pg1337 PostgreSQL Werte auf Eingabe speichern Datenbankprogrammierung 23
Z MySQL werte von formular speichern Datenbankprogrammierung 3
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
E Update DB; Werte aus Feldern übernehmen Datenbankprogrammierung 5
N Zwei Spalten und Ihre Werte vergleichen Datenbankprogrammierung 3
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
G Einheitliches Casting für Decimal und Integer-Werte Datenbankprogrammierung 5
G Werte in DB multiplizieren Datenbankprogrammierung 5
A JList nimmt nicht alle Werte aus der DB auf Datenbankprogrammierung 3
Y Hibernate - Werte aus 2 Tabellen laden Datenbankprogrammierung 29
F JDBC Abfrage Werte auslesen Datenbankprogrammierung 2
E Vergleichen von datetime mit GregorianCalender-Werte Datenbankprogrammierung 6
K [hibernate] show_sql: Werte der Parameter anzeigen Datenbankprogrammierung 3
P MYSQL werte aus liste auslesen und anderen damit updaten Datenbankprogrammierung 4
G numerische werte Datenbankprogrammierung 6
V Werte über Konsole in Datenbank schreiben Datenbankprogrammierung 2
Kirby.exe Wann sind Transactionen Serialisierbar? Datenbankprogrammierung 2
M Oracle Query umbauen (sind die Querys gleich?) Datenbankprogrammierung 5
J Warum sind Sockets für einen Live-Chat sinnvoll? Datenbankprogrammierung 8
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
E Wie kann ich textdateien, die als BLOB abgespeichert sind, aus der Datenbanktabelle auslesen? Datenbankprogrammierung 23
E Was sind die Vorteile von DB2 im Gegensatz zu einer Oracle-Datenbank? Datenbankprogrammierung 5
G HSQLDB Inserts/Updates sind nach Neustart der Anwendung Datenbankprogrammierung 1
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
J Tabellen auflisten, die in einer Datenbank enthalten sind Datenbankprogrammierung 16
C Daten finden, die nicht länger als 60 Minuten vergangen sind Datenbankprogrammierung 2
G Select-Abfragen sind sehr langsam Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben