개발자

PostgreSQL 특정 테이블의 데이터에 따라서 동적 컬럼 설정 방법

2023년 10월 25일조회 754

현재 통계 쿼리를 작성하고 있는데, 특정 테이블의 데이터에 따라서 쿼리 결과의 컬럼이 동적으로 변했으면 좋겠습니다! 예를 들면, 학생별로 성적을 뽑는 쿼리를 작성한다고 해보겠습니다. - 원하는 쿼리 결과 student_id | student_name | 국어 | 영어 | 수학 | --------------------------------------------------- 1 | 홍길동 | 60 | 50 | 40 | 이런식으로 결과가 나왔으면 좋겠습니다. - 과목 테이블 subject_id | subject_name | ----------------------------- 1 | 국어 | 2 | 영어 | 3 | 수학 | 이러한 과목 테이블이 하나 있고, 여기에 만약 '한국사' 과목 하나를 추가하게 되면 위의 쿼리 결과에 한국사 컬럼이 생기게 되는 것입니다. - 학생 성적 테이블 student_id | subject_id | score | ----------------------------------- 1 | 1 | 60 | 1 | 2 | 50 | 1 | 3 | 40 | 학생과 과목, 과목당 점수 정보가 있는 테이블입니다. - 학생 정보 테이블 student_id | student_name | ...생략 ------------------------------------- 1 | 홍길동 | 학생 정보 테이블입니다. pivot을 사용하려고 했지만, 결국 as 부분에 컬럼명을 명시해 줘야 하더라구요. 이해가 잘 되실지는 모르겠지만.. 도와주세요!!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

김대현님의 프로필 사진

원하는 답변이 아닐 것 같아서, 무시하셔도 되겠습니다. 제 경우에는, 이런 경우 애플리케이션 코드에서 취합합니다. 쿼리로는 여러 row로 받아온 데이터를 (백엔드) 애플리케이션 레이어에서 하나의 엔트리로 만들어 냅니다. 꼭 쿼리만으로 모든 걸 해결해야 하는 건 아니니까요. 아니면, PostgreSQL에는 JSON 컬럼 타입이 있기 때문에, 학생별 (과목, 점수)+ 여러 건을 하나의 컬럼에 넣는 방법도 고려해 보겠습니다.

진라님의 프로필 사진

진라

작성자

리액트 개발자2023년 10월 25일

헉 아닙니다! 저도 계속 찾아봤는데, 쿼리로 해결하기 보다는 백엔드 애플리케이션에서 처리하는게 더 맞을 것 같다는 생각이 들었어요 ㅎㅎ JSON 타입도 알아볼게요 감사해요

권영님의 프로필 사진

2년차 백엔드 개발자입니다! 원하시는 형태로 가져오려면 과목과 성적 테이블을 여러번 조인하는 형태로 가능은 하다고 생각됩니다. 과목이 국어인 아이디로 한 번, 수학인 아이디로 한 번... 의 형식이죠. 이와같이 쿼리를 작성하면 하나의 row에 계속 이어 붙이기때문에 구현자체는 가능해 보입니다. 다만 조인이라는 연산이 많을 수록 당연히 속도가 느려지기 때문에 이전 답변처럼 jsonb형식의 컬럼을 이용하거나 백엔드 로직에서 처리함이 효과적이지 않을까 하는 의견입니다!

진라님의 프로필 사진

진라

작성자

리액트 개발자2023년 10월 25일

그런 방법도 있겠군요! 💡기본 조인이 7이라서 조금 고려를 해봐야겠어용 ㅎㅎ 의견 감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!