我有一个返回平均列表的查询
@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
子句中不允许嵌套选择。它们仅在SELECT
和WHERE
中被允许。
您有两种可用的方法。
(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
作为外键列。