当没有GROUP BY子句时,SQL计数返回错误


SQL count returns error when no GROUP BY clause

为什么在我的实时服务器上而不是在我的wamp localhost上出现此查询错误?

SELECT 
type as type, 
COUNT(*) AS total
FROM page AS p
WHERE p.parent_id = p.page_id

错误消息是

SQLSTATE[42000]:语法错误或访问冲突:1140混合GROUP列(MIN()、MAX()、COUNT()…)没有GROUP列的如果没有GROUP BY子句,则为非法

我该怎么做?

我的localhost返回这个结果,这正是我所需要的,

type    total
page    16

使用聚合函数(如COUNT)时,需要包含GROUP BY子句。

SELECT 
    type as type, 
    COUNT(*) AS total
FROM page AS p
WHERE p.parent_id = p.page_id
GROUP BY type

至于为什么这在本地有效,但在您的实时服务器上无效;默认情况下,MySql不需要在GROUP BY子句中完整列出非聚合列,但您的实时服务器可能已打开ONLY_FULL_GROUP_BY选项。