2016-11-25 152 views
1

我嘗試下面的SQL語句查詢:SQL語句[42000]錯誤

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 

自己做錯了什麼上面,因爲我得到下面的下面的錯誤查詢。

錯誤我得到

SQLSTATE [42000]:語法錯誤或訪問衝突:SELECT列表1140在聚集的查詢,而無需GROUP BY,表達式#2包含非聚集列 'house.committees.status';這是不兼容的sql_mode = only_full_group_by

正在使用PDO和我的SQL版本是5.7.14雖然我剛剛從5.6.17

+1

你缺少了'組by'條款。 –

+0

但我不by子句需要一個組。 –

+1

SUM是聚合函數,並在** ** only_full_group_by模式使用一組通過。將SQL_MODE設置爲「'或按狀態使用組 –

回答

2

升級,如果你想計算計數您需要在您的查詢GROUP BY條款特定的委員會。如果你想計算整體計數,請使用下面的查詢。此查詢不使用GROUP BY。此外該錯誤的原因是,你不能與聚合功能選擇查詢具有非集合列。如果您想在選擇查詢,添加非集合列,它應該是GROUP BY條款的一部分。

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

It Works!Thanks。那有什麼不對? –

+0

不客氣。查看更新後的解答 –

+0

請參閱https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html –