2016-11-25 213 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 –