使用 spring data jpa 的query註解中 count(sum)附帶條件查詢

有一條 sql 語句 如下

select district_coordinate,city_coordinate,province_coordinate,sum(pl。plot_type =‘FUNC’),sum(pl。plot_type =‘FARM’) from t_plot pl left join t_position pt on pl。position_id = pt。id group by province_coordinate;

需要在group by 之後統計PlotType 為 FUNC 和 FARM 的個數

由於效率問題想在後端只執行一次sql 便能夠查詢出結果,

因此建立一個 DTO,結構如下

使用 spring data jpa 的query註解中 count(sum)附帶條件查詢

/** * @author liujunhong */

@Data@AllArgsConstructorpublic class PlotCountSummary { private String provinceCoordinate; private String cityCoordinate; private String districtCoordinate; /** * 農場個數 */ private Object farmCount; /** * 功能區個數 */ private Object funcCount;}

使用 spring data jpa 的query註解中 count(sum)附帶條件查詢

查詢語句如下

@Query(“select new com。fieldsay。digitfarm。dto。PlotCountSummary(pt。provinceCoordinate,pt。cityCoordinate,pt。districtCoordinate,count(CASE WHEN pl。plotType=‘FARM’ THEN 1 END) ,count(CASE WHEN pl。plotType=‘FUNC’ THEN 1 END)) from Plot pl left join Position pt on pl。position = pt group by province_coordinate”) List findPlotCountCustom();

核心內容是在@query 註解當中使用 sum 並且帶條件統計,但是由於jpa 本身不支援 sum 帶條件統計, 所以需要使用

count(CASE WHEN pl。plotType=‘FARM’ THEN 1 END)

轉自:https://www。cnblogs。com/handsomejunhong/p/12378563。html