Coding/SQL 14

[LeetCode-SQL 50] 196. Delete Duplicate Emails

문제https://leetcode.com/problems/delete-duplicate-emails/description설명중복된 이메일을 가진 회원을 삭제하고, 그 중 id가 제일 작은 회원은 남기는 문제이다.group by 를 활용할 수도 있지만, 더 사용하기 유용한 윈도우 함수 rank를 사용하여 email로 partition을 한 후, id를 기준으로 정렬을 했을 때 순위가 2위 이상인 회원을 삭제하면 된다.구현# Write your MySQL query statement belowdeletefrom personwhere id in ( select a.id as id from ( select id, email, RANK() OVER (PARTITION BY email ORD..

Coding/SQL 2025.03.11

[LeetCode-SQL 50] 1667. Fix Names in a Table

문제https://leetcode.com/problems/fix-names-in-a-table설명사용자 이름의 첫 번째 요소를 대문자로, 나머지 요소는 소문자로 치환 후 조회하는 간단한 문제이다.하지만 나는 문자열에 관련된 SQL 함수를 잘 몰랐기 때문에 이에 대해 학습할 수 있는 문제였다.insert 함수문자열의 일부를 삭제하고 다른 문자열을 삽입하는 함수INSERT(문자열, 시작위치, 삭제할 문자 개수, 삽입할 문자열)lower, upper 함수문자열을 대문자 또는 소문자로 변환LOWER(문자열), UPPER(문자열)substr 함수문자열에서 특정 위치부터 일부만 잘라서 반환하는 함수SUBSTR(문자열, 시작위치, 길이)length 함수문자열의 길이를 반환하는 함수LENGTH(문자열)concat 함수..

Coding/SQL 2025.03.08

[프로그래머스-SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

문제https://school.programmers.co.kr/learn/courses/30/lessons/157339 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr프로그래머스 LV4설명크게 어렵지는 않지만 조건이 많아 복잡했던 문제였다.2022년 11월 1일부터 2022년 11월 30일까지 대여가 가능하기 위해서는, NOT (ch.start_date > '2022-11-30' OR ch.end_date 조건이 필요하다. (처음에는 end_date가 11월 내에 있으면 제외했는데, start가 11월이고, end가 12월이면 포함해야하는데도 불구하고 제외된다.)discount 속성에서 %를 제외한 부분..

Coding/SQL 2025.03.06

[LeetCode-SQL 50] 626. Exchange Seats

문제https://leetcode.com/problems/department-top-three-salaries설명부서별 상위 3개의 급여를 구한 후, 해당 급여를 가진 직원 정보를 출력하는 문제이다.윈도우 함수를 이용하면, 원하는 컬럼을 기준으로 구분한 뒤, 순위를 정할 수 있다. 또한, DENSE_RANK는 RANK와는 다르게 중복된 값이 있으면 포함하고 다음 순위를 건너뛰지 않고 순위를 매긴다.ROW_RANK는 중복된 값이 있으면 동률이 아닌 다른 순위를 매긴다.📌 윈도우 함수 생김새함수(컬럼1) OVER (Partition by 컬럼2 Order by 컬럼3)- 컬럼 2에 따라 나눈 후, 컬럼 3을 기준으로 순위를 정한다. 또한, LAG, LEAD 등의 함수는 컬럼 1을 기준으로 직전, 직후 컬럼..

Coding/SQL 2025.03.04

[LeetCode-SQL 50] 585. Investments in 2016

문제https://leetcode.com/problems/investments-in-2016설명Insurance 행 중, 다른 Insurance 행과 lan, lon이 겹치지 않고(고유하고), 다른 Insurance 행 중 하나랑이라도 tiv_2015 값이 동일한, Insurance 데이터의 tic_2016 합을 구하는 문제이다. 각 조건에 대해 서브쿼리를 생성하고, 각 서브쿼리 결과로 나오는 테이블의 pid 에 포함되어있는지, 안되어있는지 판단하면 된다.단, with as로 선언한 서브쿼리에 대해 바로 not in, in 메서드를 할 수 없으므로, 따로 서브쿼리 형태로 만들어줘야한다! 구현# Write your MySQL query statement belowwith EQUAL_LAN_LON as ..

Coding/SQL 2025.03.03

[LeetCode-SQL 50] 602. Friend Requests II: Who Has the Most Friends

문제https://leetcode.com/problems/friend-requests-ii-who-has-the-most-friends/description/설명친구 요청을 한 사람이던, 받은 사람이던 상관 없이 친구가 가장 많은 회원의 id과 친구 수를 출력하는 문제이다.union all 과 서브 쿼리를 사용한다면 어렵지 않은 문제이다. 최댓값을 구해야하므로, 서브쿼리를 가지고 max 값을 구하고, 그 값을 where 절에서 비교해주어야한다. 구현# Write your MySQL query statement belowwith TOTAL_USERS as ( select requester_id as id from RequestAccepted union all select accepte..

Coding/SQL 2025.02.28

[LeetCode-SQL 50] 1321. Restaurant Growth

문제http://leetcode.com/problems/restaurant-growth/description/?envType=study-plan-v2&envId=top-sql-50설명각 날짜를 기준으로 6일전까지의 일주일 간의 총 amount와 그 평균을 구하는 문제이다. 행 간 관계를 이용해야하므로 윈도우 함수에서 LAG 함수를 이용하면 된다.🚀 LAG, LEAD 함수LAG 함수는 특정 컬럼을 기준으로 직전 m번째 레코드 값을, LEAD 함수는 직후 m번재 레코드 값을 출력해주는 함수이다.포맷은 다음과 같다.- LAG(컬럼1,m,n) OVER (ORDER BY 컬럼2) : 컬럼2 기준으로 정렬한 뒤, 컬럼1의 직전 m번째 값 출력- LEAD(컬럼1,m,n) OVER (ORDER BY 컬럼2) : 컬럼..

Coding/SQL 2025.02.27

[LeetCode-SQL 50] 1341. Movie Rating

문제https://leetcode.com/problems/movie-rating/description/?envType=study-plan-v2&envId=top-sql-50설명두 개의 테이블을 조인하여, 가장 많은 수의 영화를 평가한 사용자와 평균 평점이 가장 높은 영화를 찾는 문제이다.UNION ALL과 집계함수(sum,avg), 윈도우 함수(rank), 서브쿼리 등 신경쓸 게 많았던 문제였다.날짜 비교는 문자열로 감싸진 'YYYY-MM-DD' 형식의 값을 사용내림차순은 DESC서브쿼리에 반드시 별칭(ALIAS) 추가CASE문에 조건이 1개인 경우에는 WHERE 사용group by 문에 id, name을 모두 포함하여 id로 고유한 데이터를 기준으로 그룹핑하고 name을 컬럼으로 사용윈도우 함수 포맷:..

Coding/SQL 2025.02.26

[LeetCode-SQL 50] 626. Exchange Seats

문제https://leetcode.com/problems/exchange-seats/?envType=study-plan-v2&envId=top-sql-50설명id가 짝수이면 id-1 을 하고, id가 홀수이면, id+1을 하고, 테이블 데이터 수가 홀수이고 id가 그 수와 같으면 id를 변경하지 않는 sql문을 작성하면 된다. 처음에는 단순한 조건문으로 작성하면 된다고 생각했는데, 오류가 났다. selectcase when id = count(*) then id = id when id%2 = 0 then id = id-1 when id%2 0 then id = id+1 end as id , studentfrom Seatorder by id먼저, when 절에는 데이터 수정문이 들어가면 안된다..

Coding/SQL 2025.02.25