我试图在学说中做一个简单的查询,但挣扎。
$query->select(array(
'app_title' => 'u.title',
'user_name' => 'u.user_name',
'first_used' => 'MIN(u.creation_time)',
'last_used' => 'MAX(u.stop_time)',
'total_usage' => 'SUM(u.stream_seconds)',
))
->from(self::USAGE_TABLE, 'u')
->orderBy('total_usage', 'DESC');
显然,我得到一个关于列名不知道的错误,因为学说是使用它自己的别名(sclr4)。
但是,如果我尝试按实际值排序;SUM(u.stream_seconds),然后我在order by子句中得到一个意外的括号,我很确定SQL不支持这个。
所以,我只是想把数据放在一个表中,并处理列的排序。这看起来很简单,我该怎么做呢?什么好主意吗?
- 您可以通过使用
AS
的混叠结果在查询投影中列出SUM结果字段来排序。 - 如果您想使用
MIN()
、MAX()
、AVG()
等聚合函数,则必须使用GROUP BY
。
尝试类似的,这对我来说是完美的(BTW而不是select
方法中的关联数组):
$q = $this->em()->createQueryBuilder();
$q->select(['product.id', 'product.title'])
->addSelect('SUM(product.price) AS HIDDEN stat_sum_realised')
->from('ModuleAdmin'Entity'ProductEntity', 'product')
->groupBy('product.id');
$q->orderBy('stat_sum_realised', 'DESC');
聚合函数详细说明如下(例如MySQL):http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
从Doctrine ORM 2.3开始,您还可以使用HIDDEN
关键字,这将避免(在这种情况下)stat_sum_realised
被添加到您的结果集中。