php - 使用查询生成器在分组查询中获取 COUNT(),在 SELECT 中使用分组列
问题描述
我正在尝试执行以下操作:
$qb->select('O.place')
->addSelect('COUNT(P.id)')
->from(FooBar::class, 'O')
->innerJoin('O.bar', 'P')
->andWhere('O.place IN (:places)')
->andWhere('P.accountEnabled = true')
->groupBy('O.place.id')
->setParameter('places', $locationIds)
->getQuery()->getArrayResult();
所需的最终 SQL 查询将是这样的(有效):
SELECT O.place_id, COUNT(DISTINCT P.Id) partnerCount
FROM foo_bar O
INNER JOIN bar P ON O.bar_id = P.id
WHERE
O.place_id IN (83,134)
AND P.account_enabled = TRUE
GROUP BY O.place_id;
和 之间存在多对一关系,FooBar
并且Bar
和之间存在另一种多对一关系FooBar
,Place
但是由于对于此查询,我对该表中的任何详细信息都不感兴趣,因此我不需要加入它.
当我尝试上述方法时,我得到:
[语义错误] 第 0 行,第 9 列靠近 'place,COUNT(DISTINCT':错误:无效的 PathExpression。必须是 StateFieldPathExpression。"
如果我这样做:
$qb
->select('COUNT (DISTINCT O.partnerUser)')
->from(Foo::class, 'O')
->innerJoin('O.bar', 'P')
->andWhere('O.place IN (:places)')
->andWhere('P.accountEnabled = true')
->groupBy('O.place')
->setParameter('places', $locationIds)
->getQuery()->getArrayResult();
查询有效,但结果不包括place.id
,我需要知道这些聚合总计属于什么。结果查询是:
SELECT COUNT(DISTINCT p0_.partner_user_id) AS sclr_0
FROM foos p0_
INNER JOIN bars p1_ ON p0_.partner_user_id = p1_.id
WHERE p0_.place_id IN (?)
AND p1_.account_enabled = true
AND p1_.bid_balance > 0
GROUP BY p0_.place_id
此查询类似于我想要的查询,但同样,它foos.place_id
在结果中缺少(我分组依据的字段)。
如何使用 query-builder执行此查询?
解决方案
推荐阅读
- laravel - 如何更改事件显示 - Fullcalendar v5
- python - Pandas Dataframe 过滤多个条件
- css-grid - 如何修复不匹配的 CSS 网格单元大小?
- javascript - jquery如何获取未在布尔值中选择的复选框输入?
- php - wamp 服务器 apache 不包含 php.ini 文件
- python - 熊猫数据框简单统计
- google-cloud-platform - zone 没有足够的资源来满足请求。尝试其他区域,或稍后再试
- html - routerLink 选择的选项颜色
- spring-data-r2dbc - 间隔任务导致 R2DBC 中的空闲连接耗尽
- r - 在闪亮的仪表板框中对齐小部件?