반응형
후~ 이번 문제는 어떻게든 혼자 풀어볼려고 30분동안 붙잡고 씨름했다.
1. query rating / position의 평균 비율
2. 모든 raiting의 percentage 단, 3보다 작은 것들만
처음에는 WHERE rating <3 으로 풀어보려고 했으나 1번에는 rating <3이 아닌
전체 데이터에 대한 평균 비율이기 때문에 테이블을 2개로 나누어야 했다.
self join을 위해 queries 테이블을 a와 b로 나누고
1번에 대한 것은 a테이블에 있는 내용을 불러오고
2번에 대한 것은 b테이블에 있는 내용을 불러오기로 했다.
LEFT JOIN으로 rating < 3 인 값들만 붙여넣었는데 그렇게 할 경우
NULL값등 이슈가 있다고 하여 CAHT GPT가 열을 불러올 때 CASE문을 써서 해결하는 방법을 알려주었다.
round(sum(case when b.rating < 3 then 1 else 0 end)
처음에는 case 구문을 쓰는게 아직 어색해서 어디에 어떻게 써야 하는지 잘 모르겠다.
보니까 sum(avg)와 같이 구문을 같이 쓰는건 계산이 안되어서 그런 세부규칙들과
적재적소에 쿼리를 사용할 수 있도록 이해만 할 수 있다면 금방 할 수 있을 것 같다.
그래도 고무적인건 꽤나(?) 복잡하다고 생각하는 것을 풀 수 있었고
그 과정들을 머리로 조금씩이나마 그릴 수 있다는 것이었다.
내가 작성한 답
SELECT distinct a.query_name,
round(((avg(a.rating/a.position))),2) as quality,
round((1/count(b.query_name))*100,2) as poor_query_percentage
FROM queries a
LEFT JOIN queries b ON a.query_name = b.query_name
WHERE b.rating <3
GROUP BY a.query_name
GPT가 작성한 답
SELECT distinct a.query_name,
round(avg(a.rating/a.position),2) as quality,
round(sum(case when b.rating < 3 then 1 else 0 end)*100.0/count(b.query_name),2) as poor_query_percentage
FROM
queries a
LEFT JOIN
queries b ON a.query_name = b.query_name
GROUP BY a.query_name;
반응형
'직무강화 > SQL' 카테고리의 다른 글
SQL 공부, 문자열과 정규표현식 REGEXP (1) | 2024.09.01 |
---|---|
SQL 학습 GROUP_CONCAT! 엑셀 함수를 SQL에서도. (0) | 2024.08.31 |
SQL 학습 9일차. User Activity for the past 30days (DATE_SUB, DATE_ADD) (1) | 2024.08.26 |
SQL 학습 8일차 LEETCODE, Biggest Single Number (0) | 2024.08.26 |
SQL 학습 7일차 LEETCODE 607. Sales Person. (EXIST, NOT EXIST) (0) | 2024.08.24 |