首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL:选择NEW with with COUNT,GROUP BY和ORDER BY

JPQL:选择NEW with with COUNT,GROUP BY和ORDER BY
EN

Stack Overflow用户
提问于 2014-08-25 00:53:17
回答 1查看 7.6K关注 0票数 6

有两个表/实体:AppleTreeApples。苹果树产生0.n个苹果。每个苹果都是第二个表的一个实体/行,并引用了产生它的苹果树(ManyToOne)。

我想写一篇关于最高产苹果树的“高分”报告。它应由COUNT列按降序排列:

代码语言:javascript
复制
APPLE TREE | COUNT(A)
---------------------
10304      | 1000
72020      | 952
31167      | 800

为了处理这些结果,我创建了一个非实体bean,它结合了一个AppleTree对象和一个长值(用于计数):

代码语言:javascript
复制
// constructor
public AppleStats (AppleTree at, long howManyApples) { ... }

我希望使用JPQL获取这种组合类型的行。我的方法基于SELECT NEW语法:

代码语言:javascript
复制
SELECT NEW foo.bar.AppleStats ( a.appleTree, COUNT(a) AS c )
FROM Apples a
GROUP BY a.appleTree
ORDER BY c DESC

不幸的是,它产生了相当多的错误消息。我认为一个问题是计数值的列别名。我使用它是因为我想根据这个聚合值进行排序。无论我使用“计数(A)作为c”还是“计数(A) c”,这意味着没有区别。它说这些论点不是用逗号隔开的。此外,“表达式无效,这意味着它不遵循JPQL语法”。最后,它说找不到与参数类型匹配的构造函数。“

有办法获取我的AppleStats结果行吗?还是我必须回归到本机查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-25 02:15:53

请尝试以下查询:

代码语言:javascript
复制
SELECT NEW foo.bar.AppleStats(a.appleTree, COUNT(a.appleTree))
FROM Apples a
GROUP BY a.appleTree
ORDER BY COUNT(a.appleTree) DESC

不幸的是,我现在没有一个JPA平台来测试它,但是上面应该修复了原始查询的语法问题。不要担心COUNT()聚合函数会出现两次,这是编写查询时非常常见的成语,任何合适的优化器都应该能够处理它并只执行一次操作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25477734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档