求和spring-boot-jpa查询中的平均值列表



我有一个返回平均列表的查询

@Query("SELECT AVG(p.quantity) FROM Position p GROUP BY p.client.id") public List<Float> findAVGPositions();

但我想像这样返回平均值的总和,但不起作用

@Query("SELECT SUM(averages) FROM (SELECT AVG(p.quantity) as averages FROM Position p GROUP BY p.client.id)") public Float findSumAVGPositions();

你能帮我吗?感谢

不幸的是,在JPQL中,FROM子句中不允许嵌套选择。它们仅在SELECTWHERE中被允许。

您有两种可用的方法。

(1( 用findAVGPositions在Java中求和

findAVGPositions().stream().reduce(0f, Float::sum);

(2( 使用本机SQL查询

@Query(value = "SELECT SUM(averages) " +
"FROM (SELECT AVG(p.quantity) AS averages " +
"FROM position p " +
"GROUP BY client_id) AS averages_select",
nativeQuery = true)
public Float findSumAVGPositions();

根据您使用的数据库,可能需要或不需要AS averages_select别名(PostgreSQL需要它,即使它没有使用(。

请注意为Position实体使用数据库表的正确名称,为外键client.id使用数据库列的正确名称。

在我的示例中,我假设了一个标准的映射约定:position作为表名,client_id作为外键列。

最新更新