Programming-[Backend]/SQL

[TIL] GroupBy에서는 제외하여 그루핑하되, 다른 기능에 활용하는 것은 불가

컴퓨터 탐험가 찰리 2022. 5. 4. 08:01
728x90
반응형

 

상황

재고를 표시해주는 리스트에서 id, code는 같은데 유통기한이 다른 항목이 있다면 유통기한은 무시하고 groupBy를 하는 요청을 받았다. 이때 재고 id 2, 3에 대해서 groupBy를 하고 Case When 절을 사용하여 유통기한이 여러 개일때는 null로 표시하면 문제가 발생하지 않는다.

 

그런데, 만약 리스트에 있는 정보를 바탕으로 다른 기능에 활용해야한다면 이때는 문제가 생긴다. 왜냐하면 재고의 유통기한이 명확히 정해져있는데, null로 표시하여 클라이언트에서 유통기한에 대한 정보를 받을 수 없다면 각 재고들의 정보를 정확하게 활용하는 것이 불가능하기 때문이다. 예를 들어 리스트 No 1의 항목에 대해 총 재고 수량을 구할려고 재고 테이블에 접근하면, 유통기한이 null인 요청을 할 수밖에 없으므로 실제값인 5+6 = 11로 찾아오는 것이 아니라 유통기한이 null인 100개를 찾아올 수 있기 때문이다.

 


 

해결

 

유통기한을 표시하려면 groupBy에 넣어서 유통기한 별로 각 행을 분리하여 표시하던가, 아니면 유통기한 컬럼 자체를 없애야한다.

 

서버에서는 유통기한을 list로 여러 개 보내주고, 클라이언트에서는 이것을 그루핑 처리하는 방식도 가능할 수는 있다. 그러나 클라이언트에서 데이터를 가공하는 것은 책임이 분리되지 않고 리스크가 커질 것 같다.

-> Update 22.05.10 : 꼭 필요하다면 일단 프론트로 모든 유통기한 정보를 넘기고, 프론트에서 화면 처리 및 유통기한을 지정하여 요청하는 것도 방법일 수 있음

 

 

728x90
반응형