inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Bài tập SQL cho phân tích dữ liệu (Advent of SQL 2024)

Ngày 6. Tìm nhà phát hành đã ra mắt trên 10 trò chơi (Lớp nhập môn Tuần 4)

Day 6 질문

Đã giải quyết

112

Jason

9 câu hỏi đã được viết

0

SELECT 
  c.name
FROM companies c
JOIN games g 
ON c.company_id = g.publisher_id
GROUP BY c.company_id, c.name
HAVING COUNT(g.game_id) >= 10;

이렇게 풀어도 되는데, 뭐가 더 좋은 풀이인지 궁금합니다~~

강의에서 설명하신 것처럼, 먼저 뭐부터 뽑을지 정하고, 거기에 필요한 걸(JOIN같은것) 추가하듯이 푸는게 좋은건가요?

sql mysql postgresql sqlite

Câu trả lời 2

0

sunmiyoon

안녕하세요. 좋은 질문 감사합니다.

games 테이블이 매우 크고, 이렇게 매우 큰 테이블의 조인키에 인덱스가 걸려있지 않다면 제 풀이처럼 필터링을 먼저 해서 조인 전 데이터를 압축하는게 성능면에서 좋을 수 있습니다. 조인이 굉장히 비싼 연산이기 때문입니다.

SQL 성능 최적화는 상황에 따라 어떤 것이 좋은 풀이인지 달라지기 때문에 어떤 방식이 무조건 좋다고 말하기는 어려워서 어떤 경우에는 Jason 님 풀이가 더 좋을 수도 있습니다. 테이블의 인덱스 구조와 EXPLAIN을 통한 실행계획을 잘 살펴보시는 것을 추천합니다. 이 내용은 데이터리안의 SQL 데이터 분석 캠프 | 마스터반 3주차 ~ 5주차에서도 다루니 참고해주세요.

0

Jason

아~~~ 넵! 감사합니다!!! 🙏🏻

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. Jason님.

SQL 쿼리의 가장 좋은 풀이 방식은 종종 주어진 문제의 목표와 데이터베이스의 구조에 따라 달라질 수 있습니다. 하지만 일반적으로 SQL 최적화 및 가독성을 위해 아래와 같은 팁을 고려할 수 있습니다:

  1. 가독성: 가독성을 높이면 쿼리를 수정하거나 오류를 탐지하기 쉬워집니다. 작은 조각으로 쿼리를 나눈 다음 조합하는 방식은 일반적으로 더 읽기 쉬운 쿼리를 만들어냅니다. 이 방향에서 보면, 강의에서 소개된 방법(필요한 데이터를 먼저 선택한 후 JOIN을 추가하는)도 좋은 접근 방식입니다.

  2. 효율성: 큰 데이터 세트에서 쿼리를 실행할 때는 효율성이 중요합니다. 필터링을 먼저 적용한 후에 필요 시 JOIN을 사용하는 방법은 쿼리를 최적화하는 데 도움이 될 수 있습니다.

질문에 사용한 쿼리에서는 ‘출판사별로 10개 이상의 게임을 출시한 회사의 이름’을 얻기 위해 GROUP BYHAVING 절을 사용한 좋은 예제입니다. 이 쿼리는 필요한 데이터를 정확하게 추출하는 적절한 방법입니다.

관련된 예제와 자세한 설명은 아래 링크에서 확인할 수 있습니다:

이 정보를 통해 자신의 쿼리가 어떻게 작동하는지 더 깊이 이해하고 싶다면 참조하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

스프링부트 서버 에러나요

0

17

1

코드를 첨부해야하는 이유가 있나요?

0

19

2

간단한 오타 제보입니다.

0

18

1

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

33

2

실제 FK제약조건을 설정하지 않는이유

0

34

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

25

2

Free Edition 실습 영상은 아직 업데이트전인가요?

0

22

1

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

35

2

상품 정보 크롤링

0

29

2

JPA Repository 질문이 있습니다!

1

33

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

36

1

강의에 적용한 스크립트를 받아 볼수 있을까요?

0

40

2

실습소실행안되요

0

36

1

평균값 구하기

0

54

2

[Day23] 정답 데이터와 동일함에도 오답 처리됩니다.

0

83

3

DAY8 질문

0

49

2

게임을 10개 이상 발매한 게임 배급사 찾기

0

63

2

펭귄조사

0

97

2

DAY9 질문

0

111

2

코테 합격 전략

0

141

1

SQL (입문, 실전, 마스터) 빨리 듣는 방법

0

175

1

SQL 치트 시트 (실전)(마스터) 도 추가 요청합니다~

0

124

2

Day4. COUNT(*) 만해도 충분한 이유

0

127

1

테스트 케이스를 통과하지 못했습니다.

0

152

1