Zum Inhalt springen

Problem mit GROUP BY und COUNT in MySQL


etops

Empfohlene Beiträge

Hallo,

ich habe ein MySQL-Problem mit GROUP BY, und zwar habe ich in der Abfrage ein COUNT(IF()) drin, das eine Größer/Kleiner - Bedingung in Verbindung mit einer Addition abprüfen soll. Es funktioniert sonst alles bis auf dieses COUNT; ich bekomme da immer "Invalid use of GROUP BY", wenn dieser Abschnitt ausgeführt wird.

Habe ich irgendwo einen Denkfehler oder warum funktioniert die Abfrage nicht?

Die Abfrage lautet folgendermaßen:


SELECT 

CONCAT( Spalte1, '-', Spalte2 ),

COUNT( CONCAT( Spalte3, '-', Spalte4 ) ),


[blabla]


[hier funktionierts]

COUNT(IF(

(SEC_TO_TIME(

(UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) - 

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) 

) ) 

> 

(SEC_TO_TIME( 

(UNIX_TIMESTAMP( CONCAT( Datum4, ' ', Zeit4 ) ) ) - 

  ( UNIX_TIMESTAMP( CONCAT( Datum3, ' ', Zeit3 ) ) ) 

) ),1,NULL) ) AS NeuerWert1,

[fertig funktionierend]


[hier ist der Problembereich]

COUNT(IF(

(SEC_TO_TIME(

(UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) - 

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) 

)) 

> 

(SEC_TO_TIME(

AVG( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) - 

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

+ 

STD( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) - 

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

)),1,NULL) ) AS NeuerWert2,

[Ende Problem]


FROM tbl_bla

WHERE Datum2 

BETWEEN '2006-01-01'

AND '2006-09-30'

GROUP BY Spalte1, NeuerWert2

ORDER BY Spalte1, NeuerWert2

Danke und Gruß

-etops-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was willst du mit diesem SQL überhaupt erreichen? Ich hab das mal nachgebaut.


SELECT


SEC_TO_TIME(UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) )  -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) )

>

SEC_TO_TIME(

AVG( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

+

STD( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

)


 FROM `test` t ;

liefert z.B. immer nur 1 Wert, weil AVG ja z.B. schon eine Zusammenfassung der Ergebnisse ist. Das hier

SELECT

IF(

SEC_TO_TIME(UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) )  -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) )

>

SEC_TO_TIME(

AVG( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

+

STD( (UNIX_TIMESTAMP( CONCAT( Datum2, ' ', Zeit2 ) ) ) -

  ( UNIX_TIMESTAMP( CONCAT( Datum1, ' ', Zeit1 ) ) ) )

), 1, NULL) S1


 FROM `test`

geht auch. liefert eben 1 oder NULL (wenn man das größer als kleiner schreibt). Aber liefert auch nur 1 Ergebnis.

Was willst du dann noch zählen? Ach ja, der Count um das letzte geht nicht mehr.

Der dürfte bei dir wohl das Problem sein.

Frage ist nur, was tust du da überhaupt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was ich tun möchte: ...

Mach das doch mit mehreren Abfragen oder mit Subselects. Weil das SQL erfüllt wohl so wie es geschrieben wurde diesen Zweck nicht ;)

EDIT:

Kann auch so gar nicht gehen, weil du im selben SQL die Anzahl der Ergebnisse willst und den Durchschnitt errechnen... Je nach Version und Antwortzeit etc. würd ich das als Subselect machen oder die Durchschnittszeit vorher berechnen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...