我正在编写一个用于NBA数据数据可视化的应用程序。我正在使用Spring Boot + MySql数据库。我试图从每列中找到smallest和largest值,条件是玩家必须玩至少10场比赛。为此,我可以编写如下方法:
@Repository
public interface PerGameStatsRepository extends JpaRepository<PerGameStats, PerGameStatsId> {
@Query(value = "SELECT MAX(stats.pts) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
BigDecimal findMaxAmountOfPoints();
@Query(value = "SELECT MIN(stats.pts) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
BigDecimal findMinAmountOfPoints();
}
但是,该表有大约15列,例如得分,篮板,助攻,盖帽等(可能还会添加更多列)。为了获得每个值的最小值和最大值,我必须为每列编写2种方法:2x15 = 30 total。有没有一种方法可以避免这种重复,并编写一种以列名作为参数并基于该方法执行正确查询的方法?类似于:
// this obviously doesn't work
@Query(value = "SELECT MAX(stats.:#{#fieldName}) FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
BigDecimal findMaxAmountOfField(String fieldName);
您可以使用Projection:
interface MinMaxProjection {
BigDecimal getMin();
BigDecimal getMax();
}
然后您的存储库应如下所示:
@Query(value = "SELECT MIN(stats.pts) as min, MAX(stats.pts) as max FROM PerGameStats stats WHERE stats.gamesPlayed >= 10")
MinMaxProjection findMinMaxAmountOfPoints();
}
然后您的回复应该是:
{
max: 460,
min: 200,
}