MySQL: SUM() über Ergebnismenge

Hallo,

ich habe eine Abfrage, die eine Ergebnismenge von mehreren Zahlen zurückgibt.

Code:
SELECT TIMESTAMPDIFF(SECOND, MIN(time), MAX(time)) AS TimeDiffSeconds FROM tabelle GROUP BY ForeignKey

Ist es nun irgendwie möglich auf diese Abfrage noch ein SUM() zu setzen?

Wenn ich zB folgende drei Zahlen zurückbekomme: 15, 12, 23, dass ein SUM() darüber gleich 50 liefert?

Irgendwie bekomme ich es nicht hin, mit INSELECTs noch sonstwie.

Sieht evtl. jmd einen Denkfehler in meiner Abfrage oder weiß mein Problem vielleicht sogar zu lösen?

Vielen dank schonmal.



Mit freundlichen Grüßen,
KK
 
Zuletzt bearbeitet:
Hi,

nutze die Abfrage einfach als Subquery:

SQL:
SELECT SUM(TimeDiffSeconds) as Differenz FROM 
   (
      SELECT TIMESTAMPDIFF(SECOND, MIN(time), MAX(time)) AS TimeDiffSeconds
         FROM tabelle GROUP BY ForeignKey
   ) AS t

LG
 
Zuletzt bearbeitet von einem Moderator:
Arghh, ich war völlig auf den falschen Trichter gelangt.

Hatte es die ganze Zeit mit

Code:
SELECT SUM(SUBQUERY...)

versucht. Ich hab garnicht daran gedacht die Subquery in den FROM-Teil zu stecken.

Ich danke Dir vielmals für die Hilfe!



Mfg Tom
 
Hallo,

leider ereilt mich in diesem Zuge noch ein weiteres Problem. Und zwar kann ich in der SubQuery im FROM-Teil nicht auf Spalten der übergeordneten Abfrage zugreifen.

Ist das so überhaupt möglich?




Mit freundlichen Grüßen,
Tom
 
Hallo,

natürlich kein Problem. Folgendes Beispiel soll meine Frage vielleicht besser veranschaulichen.

Code:
SELECT column1 AS Test1Column1 FROM test1,
(
SELECT column1 AS Test2Column1 FROM test2 WHERE Test2Column1=Test1Column1
)

Äquivalent dazu geht auch folgendes Szenario nicht

Code:
SELECT column1 FROM test1 AS Test1,
(
SELECT column1 AS Test2Column1 FROM test2 WHERE Test2Column1=Test1.column1
)

Und zu guter Letzt

Code:
SELECT column1 AS Test1Column1 FROM test1 AS Test1,
(
SELECT column1 AS Test2Column1 FROM test2 WHERE Test2Column1=Test1.Test1Column1
)

In jedem der drei Fälle ist die Spalte, auf die ich in der SubQuery referenzieren möchte, nicht bekannt.

Leider fällt mir dabei kein Lösungsansatz ein, weshalb ich mich schon wieder an Euch wenden muss.



Mit freundlichen Grüßen,
Tom
 
:suspekt:

liest sich wie ein JOIN:

SQL:
SELECT test1.column1 AS Test1Column1, test2.column1 AS Test2Column1
   FROM test1 INNER JOIN test2
   ON Test1Column1 = Test2Column1

LG
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

ja da hast Du Recht. Ich habe die Abfrage etwas gekürzt um genauer auf die Problematik einzugehen.

Code:
SELECT column1, SUM(InnerTimeDiff) FROM tabelle1,
(
SELECT TIMEDIFF(...) AS InnerTimeDiff FROM tabelle2 LEFT JOIN tabelle1 USING(index) WHERE tabelle2.column1=tabelle1.column1
)
GROUP BY column1

//Edit: Mit der tabelle1.column1 in der Bedingung der SubQuery meinte ich die tabelle1 der äußeren Abfrage, sorry.

Ich gruppiere nach tabelle1.column1, wobei jede column1 mehrere InnerTimeDiff´s hat, die ich in der äußeren Abfrage summiere. Jetzt muss die SubQuery natürlich wissen, welche InnerTimeDiff´s sie ausgeben soll, eben dem passenden tabelle1.column1 zugehörig.

Das Ergebnis soll so aussehen, dass ich alle tabelle1.column1 ausgegeben bekomme, mit der zugehörigen Summierung der einzelnen InnerTimeDiff´s.




Mit freundlichen Grüßen,
Tom
 
Zuletzt bearbeitet:
Hi,

zeig mal bitte, was Du da jetzt genau mit TIMEDIFF berechnest, das dürfte jetzt ja anders aussehen.

LG

PS.: Wie kommst Du übrigens immer auf diesen krummen Aufbau in Deinen Abfragen?
 
Hallo kuddeldaddeldu,

schonmal danke für Deine Hilfe, aber warum krummer Aufbau?

In der Abfrage geht es darum, die Differenz in Sekunden zwischen LogOut und LogIn zu ermitteln. Im Prinzip also die Nicht-Am-Rechner-Zeit. Diese Daten müssen auf eine Nr bezogen angezeigt werden (die Gruppierung).

Die Abfrage ist in Wirklichkeit etwas komplizierter, weshalb es hier vielleicht etwas komisch aussehen mag.

Ich benötige also die Nicht-Am-Rechner-Zeit bezogen auf eine Nr. und da wiederrum alle Nummern, die ausgewählt wurden. Die LogIn-LogOut Zeiten kommen wieder jeweils aus eigenen Unterabfragen, was aber so alles schon funktioniert.

Beispiel:

Code:
SELECT nummer, SUM(Nicht_Am_Rechner) FROM tabelle1 OuterTabelle1,
(
SELECT TIMESTAMPDIFF(SECONDS, LogOutTime, LogInTime) AS Nicht_Am_Rechner FROM tabelle2 LEFT JOIN tabelle1 InnerTabelle1 USING(index) WHERE InnerTabelle1.nummer=OuterTabelle1.nummer
)
WHERE nummer="123" AND nummer="234"
GROUP BY nummer

Ich hoffe die Problematik ist nun etwas klarer geworden - falls nicht bitte einfach fragen.



Mit freundlichen Grüßen,
Tom
 

Neue Beiträge

Zurück