PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Fehler Invalid use of group function (http://www.selfphp.de/forum/showthread.php?t=26102)

basementmedia 09.02.2018 12:19:27

Fehler Invalid use of group function
 
Hi zusammen,

ich hab einen relativ komplexen SQL-query der für eine Liste von Projekten den monatlichen "Verdienst" anteilig an den Projektstunden eine Users errechnet.

Dieser funktioniert soweit auch richtig:

PHP-Code:

SELECT
ROUND
(((sum(stunden.stunden))*(ROUND(((ROUND((projekte.hmax projekte.hsatz),2))/((SELECT sum(stundenFROM stunden WHERE projekt_id=projekte.ID))),2) )),2) as peuro_h_u
FROM stunden
LEFT JOIN projekte ON stunden
.projekt_id projekte.ID
WHERE stunden
.user_id 27 AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id 

In der Ergebnistabelle werden untereinander alle Beträge ausgegeben.
Nun möchte ich aber nicht die Einzelbeträge haben sondern die Summe, also die Summe aus "peuro_h_u".

Mein erster Versuch war:

PHP-Code:

SELECT [B]SUM([/B]
ROUND(((sum(stunden.stunden))*(ROUND(((ROUND((projekte.hmax projekte.hsatz),2))/((SELECT sum(stundenFROM stunden WHERE projekt_id=projekte.ID))),2) )),2) as peuro_h_u
[B]) as summe[/B]
FROM stunden
LEFT JOIN projekte ON stunden
.projekt_id projekte.ID
WHERE stunden
.user_id 27 AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id 

das hat aber leider nicht funktioniert (die Meldung "invalid use of group function" kommt).
Klar, das Group by beißt sich mi dem SUM.
Aber wie genau macht man dann sowas?

Ich hab auch probiert, einen neuen Query um den oberen zu schnüren, also
PHP-Code:

SELECT SUM(alter query) as Summe 

Aber auch das geht nicht.

Bin für jeden Tipp dankbar.

Viele Grüße

Daniel

basementmedia 09.02.2018 12:30:44

AW: Fehler Invalid use of group function
 
OK, habs rausgefunden::

PHP-Code:

SELECT SUM(peuro_h_u) as peuro_h_u_summe FROM (SELECT
ROUND
(((sum(stunden.stunden))*(ROUND(((ROUND((projekte.hmax projekte.hsatz),2))/((SELECT sum(stundenFROM stunden WHERE projekt_id=projekte.ID))),2) )),2) as peuro_h_u
FROM stunden
LEFT JOIN projekte ON stunden
.projekt_id projekte.ID
WHERE stunden
.user_id 27 AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id
ORDER BY sum
(stunden.stundenASC) as peuro_h_u_summe 

Falls jemand ein ähnliches Problem hat.

LG Daniel

basementmedia 09.02.2018 12:46:12

AW: Fehler Invalid use of group function
 
Nun hab ich aber trotzdem noch ein Problem.
Ich will den oben aufgeführten Query als Subquery in einen anderen einbauen und von dem übergeordnete query ein Feld referenzieren. Folgender Versuch hat nicht geklappt (die neuen/geänderten Code-Teile hab ich fett formatiert):

Code:

SELECT
u.ID as dataset_id,
u.name,
(
SELECT SUM(peuro_h_u) as peuro_h_u_summe FROM (SELECT
ROUND(((sum(stunden.stunden))*(ROUND(((ROUND((projekte.hmax * projekte.hsatz),2))/((SELECT sum(stunden) FROM stunden WHERE projekt_id=projekte.ID))),2) )),2) as peuro_h_u
FROM stunden
LEFT JOIN projekte ON stunden.projekt_id = projekte.ID
WHERE stunden.user_id = u.ID AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id
ORDER BY sum(stunden.stunden) ASC) p) as peuro_summe
FROM user u ORDER BY u.name

D.h. die user_id, die im alten Query immer die 27 war, soll nun dynamisch von Parent-Query geändert werden.

Kann mir hier jemand helfen?

Beste Grüße
Daniel


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:45:20 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.