JPA Criteria Query GROUP 和 COUNT over subquery
JPA Criteria Query GROUP and COUNT over subquery
给定 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 条件 API 查询?我不知道如何将我的内部查询放入条件查询的 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
。
是的,可以使用 JPA javax.persistence.criteria API。
首先 您的 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
试试这个,
查询:select label, count(distinct file) from tableName group by label;
条件:criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("label")).add(Projections.countDistinct("file")));
给定 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 条件 API 查询?我不知道如何将我的内部查询放入条件查询的 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
。
是的,可以使用 JPA javax.persistence.criteria API。
首先 您的 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
试试这个,
查询:select label, count(distinct file) from tableName group by label;
条件:criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("label")).add(Projections.countDistinct("file")));