给定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
。
答案 0 :(得分:1)
试试这个,
查询:select label, count(distinct file) from tableName group by label;
标准:criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("label")).add(Projections.countDistinct("file")));
答案 1 :(得分:0)
答案 2 :(得分:0)
首先你的sql查询可以恢复到:
Select distinct GLOBAL_LABEL ,count (distinct FILE) from MY_TABLE group by GLOBAL_LABEL
其次,最好不要使用主要名称命名列以避免出现问题。
最终你可以将它用作你的HQL查询(没有魔法):
Select distinct ge.globalLabel,count (distinct ge.file) from GlobalEntity ge group by ge.globalLabel