@Query(value="SELECT "
+ "new com.example.ballis.DTO.ProductPopDTO"
+ "(prod.id, prod.productEngName, MAX(img.imagePath), bd.brandName, sell.wishPrice, sell.inventoryDiv, COUNT(cont.id)) "
+ "FROM Product prod "
+ "INNER JOIN Image img ON prod.id = img.targetId "
+ "INNER JOIN Brand bd ON prod.brand = bd.brandId "
+ "INNER JOIN Selling sell ON prod.id = sell.product "
+ "LEFT JOIN Contract cont ON prod.id = cont.product "
+ "WHERE img.pageDiv = 1 AND img.mainImageDiv = 1 AND sell.sellingStatus = 1 "
+ "AND sell.wishPrice = "
+ "(SELECT MIN(wishPrice) "
+ "FROM Selling "
+ "WHERE product = prod.id) "
+ "AND (sell.inventoryDiv = 1 OR "
+ "(sell.inventoryDiv = 2 AND NOT EXISTS "
+ "(SELECT 1 FROM Selling subSell WHERE prod.id = subSell.product "
+ "AND sell.wishPrice = subSell.wishPrice "
+ "AND subSell.inventoryDiv = 1)))"
+ "GROUP BY prod.id, prod.productEngName, bd.brandName, sell.wishPrice, sell.inventoryDiv "
+ "ORDER BY COUNT(cont.id) DESC",
nativeQuery = false)
List<ProductPopDTO> getProductPop();
문제)
group by를 하려고 하면 계속 오류가 났는데...
ONLY_FULL_GROUP_BY 모드가 활성화되어 있어서 발생하는 문제
해결)
썸네일로 띄우는 정보이므로 대표 이미지만 쓴다.
imagePath는 결국 하나의 값 뿐임. max를 써서 (min도 상관없음)하나의 값만 나오게 하고 나머지를 다 group by로 묶음..
의문)
+ "AND sell.wishPrice = "
+ "(SELECT MIN(wishPrice) "
+ "FROM Selling "
+ "WHERE product = prod.id) "
이부분을 없애고 select에서 그냥 MIN(sell.wishPrice)하면 되지 않나? 생각했는데 그렇게 하면 inventory 값이 다른 동일한 상품에 대해서 다른 데이터로 인식함.