SQL 강의 문제 풀면서 오류 나거나 알 게된 것들.

2022. 12. 25. 12:54SQL

SQL강의를 들으면서 알게 된 소소한 것들을 정리해 봅니다.

 

1. 줄 정리를 잘하고 들여쓰기를 잘해서 코드를 시각화한다.

 

->left join 문제를 풀면서 내가 적은 코드이다. 길게 길게 이어져서  한눈에 코드가 눈에 들어오지 않습니다.

하지만 강사님이 정리하신 코드를 보면 훨씬 깔끔하다. 들여 쓰기와  ' , '  , ' () ' 등을 잘 정리해주면 코드가 보기 편해져요.

 

2. 코드를 다양하게 사용해 봅니다.

 

위에 코드는 강사님이 풀이하신 것이고 밑에는 내가 풀이한 것이죠. 

where 절을 3개나 사용하였다.  이렇게도 돌아가지만 inner join이 훨씬 깔끔해 보이는 것도 사실이다. 코드는 항상 연습과 어떻게 하면 더 간단하고 쉽게 사용할 수 있을지의 연구가 필요한가 봐요...

 

3. 모로 가도 서울만 간다면 좋겠지만 값이 틀렸네요.

 

왼쪽이 내가 어렵게 푼 코드이고 

오른쪽이 강사님이 쉽게 푼 코드이다.. 이때 from subquery의 응용방법이 한 가지만 있는 게 아니구나 하고 깨달았다.

무엇보다 ratio 값이 내 가 푼 코드에서 잘 못되었습니다.

 

나는 바깥의 select에서 그냥 avg(c.likes)를 했기 때문에 전체 통계가 절대로 이뤄지지 않았습니다..  사실 이 부분은 전혀 감이 안 잡혀서 이렇게 풀어놓고 강의를 보고 이해를 했죠. "저렇게 코드를  푸니 훨씬 간단하고 쉽구나." 

 

 

3. 항상 group by 별로 묶은 것을 출력할 때는 주의하자.

 

enrolleds_detail에서 enrolled_id 별로 전체강의수을 구하는 것입니다.

그런데.. group by로 특정 필드를 묶는다고 해서 그것이 필수로 출력되는 것이 아니기 때문에.. 또 오류도 안 나고.

그래서 빼먹는 경우가 있습니다.

그렇게 혼종의 subquery를 만들고 난 뒤.. 자꾸 오류가 나는 것에 의아했다. table1을 인식하지 못하는 것입니다. 코드 전체 선택 후 실행해도 마찬가지였습니다.

알고 보니.. 각 select에 enrolled_id를 추가하지 않아서 생긴 오류였다.  "혹시 이것 때문에..?" 하고 추가했더니.. 너무 실행이 잘 되네요.. 

한쪽만 있어도 안된다. 한쪽만 있으면 나오는 오류는..

" SQL Error [1054] [42S22]: Unknown column 'b.enrolled_id' in 'on clause' " 이것이다.  하여튼 subquery 예외적용 같은 것일까?