패스트캠퍼스 강의를 들으며 이용했던 HackerRank Khan이랑 달리 토론하는 곳이 있어 답을 확인할 수 있다.
구문이 잘못되었을 때 뭐가 문제인지 찾아보는게 참 어려운데 그래도 힌트를 볼 수 있어 좋다.
Chat gpt에게 정답을 알려달라고 하면 바로 답이 나오기 때문에 생각을 할 수 있는 힘을 기르기 위해선 힌트가 필요했다.
그렇게 다시 들어온 HackerRank. 기본적으로 지문이 다 영어로 되어있다보니 이해하는데도 시간이 쫌 걸린다.
그래도 코드를 활용해야 한다면 영어가 기본일테니.... 조금씩 해보자!
삼각형 종류를 나누어 출력
이 문제는 삼각형에 대한 정의부터 이해해야 풀 수 있다.
기본적으로 CASE 1 > 2 > 3 > 4 로 넘어갈 때 앞에서 충족하면 해당케이스로 고정되기 때문에
더 큰 범위의 조건먼저 부여해서 쿼리를 짜야 했다.
즉, 삼각형이 아닌 것 > 등변 삼각형, 이등변 삼각형, 삼각형 과 같은 순서로 짜야 한다.
쉽게 얘기하면 성적이 90점이상 = A / 80점이상 = B / 70점이상 = C ELSE = F로 해서 쿼리를 짤 때
1안 : 70점 이상인 경우 C라는 조건을 먼저 부여했을 때 70점 이상인 점수들은 모두 C가 나오기 때문에
2안 : 90점 이상인 경우 > 80점 이상인 경우 > 70점 이상인 경우로 쿼리를 짜야 한다.
EX) 90 50 80 40 65 70 90
1안 : C F C F F C C
2안 : A F B F F C A
[1. SQL 구문으로 다시 알 수 있었 던 것]
1.1. 값이 다르다 : !=
A,B,C가 다를 때 표현 하는 방법 A!=B AND B!=C AND A!=C
1.2. 값이 같다 : = (각각의 경우를 표기해주어야 함, 축약 X)
A,B,C가 같을 때 표현 하는 방법 A=B AND B=C AND A=C
1.3. CASE 구문
SELECT에서 사용할 수 있으며, END AS TITLE
앞의 구문들이 적용된 하나의 열로서 활용 가능 (TITLE 열)
대륙의 이름과 평균 인구(라운드 다운한 것)를 2개의 테이블에서 뽑아보세요.
이 문제는 CITY, COUNTRY 두개의 테이블을 합쳐서 대륙명과 인구의 평균값(라운드 다운)을 표현하는 문제이다.
총 3번의 코드를 작성했는데, 3가지를 몰라서 이번에 깨닫게 되었다.
1차코드 : ROUND, AVG, 테이블.열 배치 방법
EXCEL을 잘 다루기에 ROUND, AVG 사용법은 알고 있으나 CITY.population을 어떻게 적용시켜야 하는지 몰랐다.
CITY.ROUND(avg(population)) → ROUND(avg(CITY.population)
SELECT COUNTRY.continent, CITY.ROUND(avg(population))
FROM COUNTRY
JOIN CITY
ON COUNTRY.code = CITY.countrycode
2차코드 : GROUP BY의 필요성
JOIN으로 테이블을 합친 이후에는 필드값들을 호출해도 그룹핑하지 않으면 노출되지 않는다.
PK, FK인 CODE로 JOIN하여 두 테이블을 엮은 이후 각각의 테이블에서 원하는 값을 노출시키려면
GROUP BY로 기준을 잡아야 한다.
추가 조건은 HAVING으로 해결하면 되긴 하는데, 사실 SQL의 세부 기능들은 대략 아는데 기작원리가 머리에 다 들어가있지 않아서 생기는 일들인 것 같다. 계속 연습하여 세부규칙이 머리에 들어오고 테이블 조인들이 그려진다면 쉽게 할 수 있을 것 같다는 생각이 든다.
SELECT COUNTRY.continent, ROUND(avg(CITY.population))
FROM COUNTRY
JOIN CITY
ON COUNTRY.code = CITY.countrycode
3차코드 : FLOOR
뜻은 알고 있지만 활용은 처음 해본다. 값의 특정부분을 버리는 함수인데,
ROUND DOWN 하여 INTEGER로 추출하라고 할 때 사용하면 되는 걸 알 수 있었다.
SELECT COUNTRY.continent, FLOOR(avg(CITY.population))
FROM COUNTRY
JOIN CITY
ON COUNTRY.code = CITY.countrycode
GROUP BY COUNTRY.continent
'직무강화 > SQL' 카테고리의 다른 글
SQL 학습 6일차, 183. Customers Who Never Order (NULL, LEFT JOIN) (0) | 2024.08.22 |
---|---|
SQL 학습일지 5일차, 리트코드 182. Duplicate Emails 중복값 찾기 (0) | 2024.08.21 |
SQL 공부 4일차 LEETCODE, 181. Employees Earning More Than Their Managers (0) | 2024.08.20 |
SQL 3일차_LEETCODE. 175. Combine Two Tables (0) | 2024.08.20 |
SQL 어떻게 공부해야 할까? Khan Academy로 복기! (0) | 2024.08.17 |