HackerRank | Draw The Triangle 1 (재귀적CTE)
·
SQL/HackerRank
*을 20행까지 출력하는 문제 WITH RECURSIVE Numbers AS ( SELECT 20 AS n UNION ALL SELECT n - 1 FROM Numbers WHERE n > 1)SELECT REPEAT('* ', n) AS patternFROM Numbers;재귀적 CTE로 20에서 1까지 n을 설정하고REPEAT으로 n만큼 출력한다
HackerRank | Higher Than 75 Marks
·
SQL/HackerRank
문제 풀이WHERE에서 Marks가 75보다 크게 설정 ORDER BY에서 이름을 마지막 3글자 기준으로 정렬하기 위해 RIGHT( ,3)을 사용중복이 생긴다면 ID를 기준으로 오름차순 정렬SELECT NameFROM STUDENTSWHERE Marks > 75ORDER BY RIGHT(Name,3),ID;
LeetCode | Replace Employee ID With The Unique Identifier
·
SQL/LeetCode
문제 문제풀이unique_id가 없는 사용자에게는 null을 출력해야하므로LEFT JOIN으로 두 테이블을 연결SELECT U.unique_id, E.nameFROM Employees ELEFT JOIN EmployeeUNI U ON U.id = E.id
HackerRank | Draw The Triangle 2 (재귀적CTE)
·
SQL/HackerRank
문제*을 20행까지 출력하는 문제이다 풀이WITH RECURSIVE Numbers AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM Numbers WHERE n 재귀적 cte를 활용하여 n을 1에서 20까지 설정 본 쿼리에서 repeat을 사용하여 행마다 n의 개수만큼 별을 찍게 설정  여담으로 python에서 for문과 같은 원리이다python으로 작성하면 아래와 같다for i in range(1, 21): print('* ' * i)
HackerRank | Occupations (sql에서 pivot하기)
·
SQL/HackerRank
문제데이터를 피벗(Pivot)하여 각 직업(Doctor, Professor, Singer, Actor)별로 이름을 알파벳순으로 정렬하고, 각 직업에 해당하는 이름을 출력해야 합니다. 각 직업별로 가장 많은 이름이 포함된 직업에 맞춰 빈 칸은 NULL로 채웁니다. 풀이FROM에서 occupation을 대상으로 name별로 오름차순 정렬한 row_number를 생성한 서브쿼리 작성 SELECT에서 CASE WHEN으로 직업별로 이름 출력하게 작성 ※ 쿼리에서는 ROW_NUMBER()를 사용하여 각 직업별로 행 번호를 부여하고, 그 번호를 기준으로 *그룹화(GROUP BY)*하여 결과를 생성합니다. 이 과정에서 각 직업별로 CASE 문을 사용하여 각 행에서 해당 직업에 해당하는 이름을 가져오는데, 각 그룹에서..
HackerRank | Weather Observation Station 20 (sql로 중위수 구하기)
·
SQL/HackerRank
문제위도의 중위수를 구하는 문제입니다. 풀이 1 (노가다). 처음에 COUNT로 북위의 개수가 499개인 것을 확인ROW_NUMBER를 통해 250번째에 있는 것이 중위수이므로 아래와 같은 쿼리 작성하지만 이 풀이는 총 개수가 늘거나 줄어든다면 매번 숫자를 바꿔야한다는 번거로움이 존재WITH MEDIAN AS( SELECT LAT_N, ROW_NUMBER() OVER(ORDER BY LAT_N ASC) AS RN FROM STATION)SELECT ROUND(LAT_N, 4)FROM MEDIANWHERE RN = 250; 풀이 2 (범용적인 풀이).WITH구문에서 COUNT(*) OVER()로 각 행마다 전체 행의 개수를 출력하는 칼럼을 추가함 ( 그림의 3열 )그리고 메인 쿼리를 보..
ROW_NUMBER() vs. RANK() vs. DENSE_RANK()
·
SQL
1. ROW_NUMBER()고유한 순위를 부여동일한 값이 있어도 각 행에 고유한 번호가 매김건너뛰는 순위가 없음: 순위는 항상 연속적으로 증가SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_numFROM Employees;namesalary row_numEve70001Frank65002David65003Bob50004Charlie40005Alice30006 Frank와 David의 급여가 같지만, ROW_NUMBER()는 이들에게 서로 다른 고유한 순위를 부여 2. RANK()동일한 값이 있을 경우 같은 순위를 부여동일한 순위가 부여된 후에는 그 다음 순위가 건너뜀SELECT name, salary, RANK() OVER (ORD..
프로그래머스 | SQL 스터디 19 (재귀적 CTE) (완)
·
SQL/프로그래머스
SELECT⭐특정 세대의 대장균 찾기(Lv4)문제 설명​문제​풀이출처 :  https://20240228.tistory.com/258 이 문제를 Self join을 2번해서 (노가다) 풀었지만 더 좋은 풀이법이 있어서 출처를 남기고 올립니다. WITH에서 GNEREATION을 설정합니다 1세대의 경우, PARENT_ID가 NULL인 것이 1세대 입니다.UNION ALL로 중복이 없게 합치고추가적으로 PARENT_ID를 가지는 ID를 JOIN해서 세대를 추가합니다. 이렇게 푸는 것이 더 좋은 이유는 유지, 보수 측면에서 더 용이하기 때문입니다.세대라는 칼럼을 추가해서 향후에도 세대를 찾고 싶을때 더 편하게 찾을 수 있죠WITH RECURSIVE CTE AS ( SELECT ID, 1 AS GENERA..