본문 바로가기
개발일지/SQL

SQL group by 결과값 이상하다... 이건 아닌데

by 다니엘의 개발 이야기 2022. 7. 2.
320x100

복기용

 

답안 코드

 

select police_station, avg(case_number)

    -> from crime_status

    -> where status_type like '발생' and crime_type like '절도'

    -> group by police_station

    -> order by avg(case_number) desc

    -> limit 10;

 

 

select case_number

from crime_status 

where crime_type like '%절도%' and cri+

me_type like '%발생%’;

 

#1 경찰서 별로 절도 범죄 평균 발생 건수를 가장 많은 건수 순으로 10개 검색하고 확인하세요

# 해답코드

select police_station, avg(case_number)

    -> from crime_status

    -> where status_type like '발생' and crime_type like '절도'

    -> group by police_station

    -> order by avg(case_number) desc

    -> limit 10;

 

# 내 코드

select reference, avg(case_number)

    -> from crime_status

    -> where crime_type like '%절도%' and status_type like '%발생%'

    -> group by reference

    -> order by avg(case_number) desc

    -> limit 10;

 

#2 경찰서 별로 가장 많이 검거한 범죄 건수를 가장 적은 건수 순으로 5개 검색하세요.

 

# 내코드

select reference, crime_type, max(case_number) 최대검거수

    -> from crime_status

    -> where status_type like '%검거%'

    -> group by reference

    -> order by 최대검거수

    -> limit 5;

 

# 답안코드

 

select police_station,crime_type, max(case_number) 

from crime_status 

where status_type like '검거' 

group by police_station 

order by max(case_number) asc 

limit 5;

 

솔직히 풀이 코드를 해줄때, 이해하고 설명해주는건지 의문이다.

좀 심화버전 들어오니깐 잘은모르겠는데, 그게 답은 아닌것같은데도 그걸 아무렇지도 않게 넘어간다

한두번도 아니고;

가령 지금 이 코드의 경우도 최대건수로 조회했을때, 건수가 몇개가 나오는지는 행이 310개정도라 알길이 없지만

최소한에 최대로 높은 범죄타입이 각 경찰서마다 모두 살인은 아닐건데말이다.

limit를 풀고 조회해봐도 결과값으론 모두 살인이다.

 

 

#3 경찰서 별로 가장 적게 검거한 건수 중 4건보다 큰 경우를 건수가 큰 순으로 정렬하여 검색하세요.

 

# 내코드 - 결과값은 문법 에러

 

select reference, crime_type, min(case_number) 범죄최저값

    -> from crime_status

    -> where status_type like '%검거%'

    -> group by reference 

    -> order by 범죄최저값 desc

    -> having 범죄최저값 > 4;

 

-> 답안 이후 수정 코드

select reference, crime_type, min(case_number)

    -> from crime_status

    -> where status_type like '%검거%'

    -> group by reference

    -> having min(case_number) > 4

    -> order by min(case_number) desc;

 

 

# 답안코드

 

select police_station, crime_type, min(case_number)

    -> 

    -> from crime_status

    -> where status_type like '검거'

    -> group by police_station

    -> having min(case_number) > 4

    -> order by min(case_number) desc;

 

 

이것도 2번문제와 마찬가지로 cirme_type이 살인만 나온다.

한군데도 아니고 모두.

즉, 나는 이게 코드에 뭔가 표현이 안된 부분이 있다고 본다.

 

 

#4 ‘대문’으로 끝나는 이름의 경찰서 별 범죄발생 건수의 평균이 500건 이상인 경우를 검색하세요.

 

# 내코드

# 여전히 범죄항목이 ‘살인’밖엔 안나온다. 올바른 코드를 알고 싶다.

 

select reference, crime_type, avg(case_number)

    -> from crime_status

    -> where police_station like '%대문' and status_type = '발생'

    -> group by reference 

    -> having avg(case_number) >= 500;

 

 

# 답안 코드

 

select police_station, avg(case_number)

    -> from crime_status

    -> where police_station like '%대문' and status_type like '발생'

    -> group by police_station

    -> having avg(case_number) >= 500;

 

 

중간에 강사님이

select * from crime_status

where police_station like ‘서대문’ and status_type like ‘발생’;

 

을 했을때 살인은 case_number 가 가장 적은 3이였고

폭력이 가장 많은 1292 였다.

역시, 데이터가 이상하다기 보단, 코드가 이상하다. 확실하게 이상하다.

 

아직 장기간의 시간이 흘렀는데도, 강사님이 별다른 언급을 안하는것을 보니,

실무 강사님이 다른건 몰라도 이건 정확히 알고 설명한다는 느낌보다는

이론강사님의 코드를 따라치는거 밖엔 안되는 느낌이다.

300x250