DB in api server

By Moka

group by

score가 70 이상인 레코드들을 user_id 그룹별로 score 합계를 출력

SELECT user_id, SUM(score) 
FROM User
WHERE score >= 70
GROUP BY user_id


User 테이블로부터 user_id별 레코드수 및 합계, 평균, 최대값을 계산

SELECT user_id, COUNT(scroe), SUM(scroe), AVG(scroe), MAX(scroe)
FROM User
GROUP BY user_id

group by 의 기본적인 기능은 해당 컬럼을 기준으로 중복되는것을 없애고 묶어주는 것이다. distinct 와 비슷하게 보이기도 하지만, distict 는 모든 컬럼의 값이 같아야 중복을 제거해준다. 하지만 group by 는 해당 컬럼의 값만 같으면 묶어주는 것이다.

이것을 이용하게 된 것이 join 연산을 할경우, 예를 들어 User - Image ( 1:다 관계 ) 조인하여 User List 를 돌려줄경우 하나의 User 에 Image 가 여러개 물려있을 경우가 있다. 하지만 리스트는 User 하나씩하여 리스트를 반환해야 하며 이럴경우 Image 의 user_id 를 조인시켜 해결 하였다. 이경우는 최신의 이미지 데이터만 보이게 된다. 맞는 방법인지는 확실히 모르겠다.