2016-11-25 5 views
1

ich die folgende SQL-Anweisung QUERY versuchen:SQL-Anweisung [42000] Fehler

SELECT COUNT(status) as tot, 
     CASE WHEN (status = 'pending') 
     THEN COUNT(status) ELSE 0 END pct, 

     CASE WHEN (status = 'rejected') 
     THEN COUNT(status) ELSE 0 END rct, 

     CASE WHEN (status = 'active') 
     THEN COUNT(status) ELSE 0 END act, 

     CASE WHEN (status = 'disabled') 
     THEN COUNT(status) ELSE 0 END dct 

    FROM committees 

Was ist falsch mit der Abfrage oben, weil ich folgende Fehlermeldung unten zu bekommen.

Der Fehler ich

SQLSTATE [42000] erhalten: Syntaxfehler oder Zugriffsverletzung: 1140 In aggregierter Abfrage ohne GROUP BY Ausdruck # 2 von SELECT-Liste enthält nicht aggregierten Spalt 'house.committees.status'; dies mit sql_mode unvereinbar ist = only_full_group_by

Am PDO und meine SQL-Version verwendet, ist 5.7.14 Obwohl ich von 5.6.17

+1

Ihnen fehlt die Klausel 'group by'. –

+0

, aber ich brauche keine Gruppierung nach Klausel. –

+1

SUM ist eine Aggregatfunktion und im ** only_full_group_by ** -Modus verwenden Sie eine Gruppe nach. Setzen Sie den SQL_MODE auf '' oder verwenden Sie die Gruppe nach Status –

Antwort

2

gerade ein Upgrade Sie müssen GROUP BY Klausel in der Abfrage, wenn Sie Zahl berechnet werden soll für ein bestimmter Ausschuss. Wenn Sie die Gesamtzählung berechnen möchten, verwenden Sie die folgende Abfrage. Diese Abfrage verwendet GROUP BY nicht. Der Grund für den Fehler ist auch, dass Sie in einer Select-Abfrage mit Aggregationsfunktionen keine nicht aggregierte Spalte haben können. Wenn Sie eine nicht aggregierte Spalte in der Select-Abfrage hinzufügen möchten, sollte sie Teil der GROUP BY-Klausel sein.

SELECT COUNT(status) as tot, 
      SUM(CASE WHEN status = 'pending' 
      THEN 1 ELSE 0 END) as pct, 

      SUM(CASE WHEN status = 'rejected' 
      THEN 1 ELSE 0 END) as rct, 
      SUM(CASE WHEN status = 'active' 
      THEN 1 ELSE 0 END) as act, 

      SUM(CASE WHEN status = 'disabled' 
      THEN 1 ELSE 0 END) as dct 

     FROM committees 
+0

Es funktioniert! Danke. Also, was war falsch? –

+0

Gern geschehen. Überprüfen Sie die aktualisierte Antwort für die Erklärung –

+0

siehe hier https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html –

Verwandte Themen