記錄一下使用 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,結構如下

 
         
/**
* @author liujunhong
*/

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

查詢語句如下

  @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<PlotCountSummary> findPlotCountCustom();

 

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

count(CASE WHEN pl.plotType='FARM' THEN 1 END)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM