Doctrine - 按外部聚合值过滤
-
10-07-2019 - |
题
如何在Doctrine中使用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
如何访问Dql中的 users_phonenumber_count ?
解决方案
你需要使用HAVING,而不是WHERE。此外,您需要按查询中实际存在的内容进行分组,在本例中为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
其他提示
我不记得我是如何做到这一点的确切细节,但请记住它必须使用<!>“; HAVING <!>”;
这是因为SQL的工作方式,而不是特定的学说 - WHERE无法比较计算值,你必须使用(或者你可以做WHERE COUNT(某事)<!> lt; something)
不隶属于 StackOverflow