2009-10-29 77 views
1

如何在學說中使用Agregate函數的結果?學說 - 按國外混合值過濾

例如,我想知道用戶愚蠢的數字。

SELECT u.name, COUNT(p.id) AS users_phonenumber_count 
FROM users u 

    INNER JOIN phonenumbers p ON p.user_id = u.id 
WHERE 
    users_phonenumber_count > 10 
GROUP BY 
    u.id 

我怎麼能訪問users_phonenumber_count在其中DQL?

回答

0

你需要使用HAVING,而不是在哪裏。另外,您需要根據您的查詢中實際存在的內容進行分組,例如u.name。假設u.name是唯一的 - 如果不是,則需要由u.id和u.name進行分組。

SELECT u.name, COUNT(*) AS users_phonenumber_count 
FROM users u 

    INNER JOIN phonenumbers p ON p.user_id = u.id 
GROUP BY 
    u.name 
HAVING 
    count(*) > 10 
+0

我在問學說,但看起來不錯。我會盡快嘗試 – Mailo 2009-10-31 16:58:28

+0

啊,對不起,錯過了:-)嗯,這是你需要從Doctrine的另一端出來的那種SQL :-) – 2009-11-01 11:39:25

+0

Doctrine DQL支持HAVING ...請參閱http:// www.doctrine-project.org/documentation/manual/1_0/nl/dql-doctrine-query-language#group-by,-having-clauses – Ropstah 2010-04-16 14:34:46

0

我不記得如何我已經這樣做了具體細節,但請記住,它必須使用「具有」

這是因爲SQL的方式工作,沒有特別的學說 - 在無法比較計算值,你必須使用有(或你可以做的地方(東西)<東西)

+0

無論如何,但對我而言,更重要的是如何獲得價值。但是,謝謝你的提示 – Mailo 2009-10-29 12:56:48

+1

問題是你無法在WHERE訪問它。不在SQL中,不在DQL中。 WHERE過濾發生在GROUP BY之前,並且聚合計數僅在GROUP BY之後創建,因此在應用WHERE時不存在。你需要使用: GROUP BY u.id HAVING users_phonenumber_count> 10 – 2009-10-29 12:58:49