1. 카타
문제 30. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
SELECT car_type
from car_rental_company_car
where options in ('통풍시트', '열선시트', '가죽시트')
group by 1
order by car_type asc
크게 어렵지 않지만 초반에 가장 당황했던 문제가 아닌가 싶다. 자동차 종류 별로 특정 옵션(통풍시트, 열선시트, 가죽시트) 셋 중 하나 이상이 포함된 자동차의 수를 각 종류별로 카운팅하라는 문제였는데, like를 쓸 지 잠깐 고민하다가 배워놓고 거의 사용하지 않았던 in ()을 활용하기로 결정해서 위와 같이 썼다(like보다 쓰기도 더 짧고 간편하다는 이유도 컸다). 그런데 그랬더니 출력값이 하나도 나오지 않았고 몇 번을 다시 끄적이다가 혹시나 해서 group by와 order by를 지워봤는데 마찬가지로 아무런 출력 값이 나오질 않았다ㅠ
또다시 잠깐을 생각하다가 결국 '질문하기'를 클릭해서 들어갔는데 마침 나와 같은 방식으로 답을 작성하고 결과값이 왜 안 나오는지 의아해하는 사람이 더러 있다는 것을 발견했다.
그중 자세하게 달린 한 답변의 내용은 아래와 같았다.
저와 같은 고민을 하셨네요.
저도 처음에 IN은 왜 안나오지?? 생각했는데, 제 나름대로 고민한 결과를 달아봅니다..
작성 하신 것처럼 LIKE문으로 해야 OPTIONS 안에 있는 여러가지 옵션 중 조건에 맞는 문자열을 선택해올 수 있어서 입니다.
만약 IN으로 '가죽시트'를 찾는다고 가정하면, OPTIONS에서 오직 '가죽시트'만을 문자열로 가진 컬럼이 선택되야 합니다.
근데 해당 테이블을 * SELECT 해봤을 때, 대부분의 OPTIONS 맨 앞부분에 '열감지센서, +@ ' 이런식으로 들어가 있기 때문에 예상한대로 값이 나오지 않았습니다.
이를 확인하기 위해< SELECT * FROM CARRENTALCOMPANY_CAR WHERE OPTIONS IN '네비게이션' >을 해보시면 이해하실 수 있으실 겁니다.
이 경우 해당 문자열을 오직 한 가지만 가진 컬럼이 존재하기 때문에 출력 결과값이 도출되는 것을 확인 하실 수 있습니다.
(출처 : https://school.programmers.co.kr/questions/52932)
즉, in()함수는 like와 달리 해당 단어/문자'만!!!' 가지고 있는 셀만 카운트 한다는 것. 댓글을 보고 바로 출력이 되지 않았던 이유가 납득이 됐고, 아래와 같이 like를 활용하니 바로 원하던 정답이 출력됐다.
SELECT car_type,
count(1) cars
from car_rental_company_car
where options like '%통풍시트%' or options like '%열선시트%' or options like '%가죽시트%'
group by 1
order by car_type asc
상황마다 다르겠지만, 어지간한 상황에서는 in 보다 like가 좀 더 확실하고 안전한 함수이지 않을까?
2. SQLD 자격증 코스
데이터 모델링 :
-정보 시스템 구축을 위해 데이터 관점의 업무를 분석하는 과정
-현실 세계의 데이터를 약속된 표기법에 의해 표현하는 과정
-데이터베이스를 구축하기 위한 분석 및 설계의 과정
ERD(Entity Relationship Diagram) : 데이터들의 관계를 나타낸 도표
3. TMI
어제 사촌 모임이라고 맥주 한 캔에 고량주 두세잔 마시고서 아침에 러닝했더니 하루종일 졸려서 죽을맛.
운동을 어떻게 적당히 병행하면서 공부를 할 지 고민이다.
그냥 술이 문제인건가?