2012-03-22 113 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