给定 MY_TABLE
的以下 SQL 结构:
GROUP_LABEL | FILE | TOPIC
-----------------------------
group A | 1.pdf | topic A
group A | 1.pdf | topic B
group A | 2.pdf | topic A
group B | 2.pdf | topic B
我的任务是按GROUP_LABEL
对这些内容进行分组,同时忘记文件的不同TOPIC
。所以我的预期结果是
GROUP_LABEL | COUNT(*)
----------------------
group A | 2 -- two different files 1.pdf and 2.pdf here
group B | 1 -- only one file here
在纯 SQL 中我会这样做
SELECT GROUP_LABEL, COUNT(*) FROM (
SELECT DISTINCT GROUP_LABEL, FILE FROM MY_TABLE
);
是否可以将其转换为 JPA Criteria API 查询?我不知道将我的内部查询放入 Criteria 查询的 from 构造中,在 https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.html 的 9.3.1 中看来这是不可能的。
但我简直不敢相信;-) 以前有人这样做过吗?内部查询将通过各种经过充分测试的过滤谓词来丰富,我希望重用这些谓词。
我使用的 spring-boot-starter-data : 1.5.6.RELEASE
主要是标准配置。
最佳答案
试试这个,
查询:select label, count(distinct file) from tableName group by label;
标准:criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("label")).add(Projections.countDistinct("file")));
关于java - JPA Criteria 通过子查询查询 GROUP 和 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549781/