@Query("SELECT EXTRACT(MONTH FROM e.estimateDate) AS MONTH, " +
"EXTRACT(YEAR FROM e.estimateDate) AS YEAR, " +
"e.status.id, " +
"ROUND((SUM((i.squareFeet*i.depth)*i.price)-SUM(DISTINCT e.discount)), 2) AS TOTAL " +
"FROM Estimate e " +
"INNER JOIN Item i " +
"ON i.estimate.id = e.id " +
"WHERE e.seller.id = :sellerId " +
"AND EXTRACT(YEAR FROM e.estimateDate) = :year " +
"GROUP BY MONTH, YEAR, e.status.id " +
"ORDER BY EXTRACT(YEAR FROM e.estimateDate), EXTRACT(MONTH FROM e.estimateDate) DESC ")
错误:
unexpected token: DISTINCT
错误出现在 SUM(DISTINCT e.discount) 上。我删除了不同的和有效的,但值是错误的。我在控制台上复制了 sql 并直接使用数据库,一切正常。
我记得 Spring Data 查询中默认使用 JPQL。因此,如果您想执行一些在数据库中工作的特定 SQL 结构 - 在查询注释中设置“nativeQuery”参数。
@Query(sql = "", nativeQuery = true)
但请注意,不同数据库的 SQL 方言可能有所不同。它可能不适用于其他数据库。考虑重写查询以适应 JPQL。