2012-03-22 114 views
3

为什么我在我的活服务器上发现此查询时出错,但不在我的本地localhost上?当没有GROUP BY子句时,SQL计数返回错误

SELECT 
type as type, 
COUNT(*) AS total 

FROM page AS p 
WHERE p.parent_id = p.page_id 

该错误消息是,

SQLSTATE [42000]:语法错误或访问冲突:1140混合 组列(MIN(),MAX(),COUNT(),.. 。)没有GROUP列是 非法,如果没有GROUP BY子句

我该如何解决这个问题?

我的本地回报这样的结果是什么,我需要,

type total 
page 16 
+0

看不到'localhost;你在本地运行的数据库服务器是什么? – 2012-03-22 02:56:53

+0

它是wamp服务器2.1。 – laukok 2012-03-22 03:07:26

+3

wamp不是服务器 – 2012-03-22 03:08:13

回答

15

当使用聚合函数,如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 doesn't require complete listing of non-aggregate columns in the GROUP BY clause by default,但您的实时服务器可能已启用ONLY_FULL_GROUP_BY选项。

+0

感谢您修复它! :-) – laukok 2012-03-22 03:12:27

+0

它帮助我摆脱了头痛。谢谢! – 2012-03-29 07:38:23