본문 바로가기

SQL/LeetCode&HackerRank

(14)
[MySQL] HackerRank - Challenges 풀이 문제 출처: https://www.hackerrank.com/challenges/challenges/problem 문제: 줄리아가 학생들한테 코딩 문제를 만들어 달라는 부탁을 했다. 여기서 학생들이 각자 만든 문제를 challenges라고 칭한다. 우리는 결과로 학생들의 id(hacker_id), 이름(name), 만든 문제 수(challenges_created)를 출력할 것이다. 정렬 조건은 다음과 같다. 1. 문제 개수(challenges_created)는 내림차순 desc 으로 정렬한다. 문제 개수가 같을 경우, hacker_id를 기준으로 정렬한다. 2. 이때 if 중복된 문제 개수 < 최대 문제 개수, then 중복된 문제 수를 가진 데이터는 제외한다. (중복된 문제 개수 == 최대 문제 개수,..
[MySQL] LeetCode 184 - 서브쿼리와 이너 조인 활용하기 문제 출처: https://leetcode.com/problems/department-highest-salary/ 문제: 각 부서에서 가장 높은 급여를 받는 사람의 소속 부서, 이름, 급여 금액을 찾아라 풀이: 먼저 각 부서별로 가장 높은 급여를 찾는다. SELECT departmentID , MAX(salary) AS Salary FROM Employee GROUP BY departmentID 결과 | departmentID | Salary | | ------------ | ------ | | 1 | 90000 | | 2 | 80000 | 그 다음, 위 결과에 부합하는(해당 부서에서 가장 높은 급여를 받는) 사람을 추출해야 한다. 그렇게 하기 위해서는 위 결과를 테이블 처럼 사용할 수 있게 서브쿼리로 ..
[MySQL] HackerRank - Top Earners 풀이 3가지 문제 출처: https://www.hackerrank.com/challenges/earnings-of-employees/problem?h_r=internal-search 문제: 가장 높은 수입과 그 금액을 버는 사람 수 찾기 풀이 3가지: [1] WHERE절 서브쿼리 먼저 총 수입은 months * salary 로 구하고 earnings라고 칭한다. 가장 높은 earnings를 찾기 위해 WHERE절을 아래와 같이 작성하면 에러가 뜬다. SELECT (months * salary) AS earnings FROM Employee WHERE months * salary = MAX(months * salary) MAX() 앞에 SELECT문을 한번 더 씌우면 해결된다. SELECT (months * salar..
[MySQL] Leetcode 196 - DELETE문을 사용하여 중복값 삭제하기 문제: 중복된 이메일을 삭제하고 중복된 이메일 중 가장 작은 id를 가지는 이메일만 남겨라 = 중복된 이메일들 중 가장 작은 id만 제외하고 삭제 3가지 풀이: [1] WHERE절에 조건걸기 DELETE p1 FROM Person p1, Person p2 WHERE p1.email = p2.email AND p1.id > p2.id Person 테이블 id email 1 john@example.com 2 bob@example.com 3 john@example.com WHERE절(p1.email = p2.email)을 적용한 테이블 모양 p1.id p1.email p2.id p2.email 3 john@example.com 1 john@example.com 1 john@example.com 1 john@e..
[MySQL] Leetcode 627 - UDATE문을 사용하여 성별 전환하기 문제: UPDATE문을 사용하여 성별(sex)을 남성(m)은 여성(f)으로, 여성(f)은 남성(m)으로 바꾸어라 4가지 풀이: [1] UPDATE Salary SET sex = IF (sex = 'm','f','m') IF (sex = 1, 2, 3) - sex가 1이라면 2로 바꾸고 그렇지 않다면 (1이 아니라면) 3으로 바꾸어라 [2] UPDATE Salary SET sex = CASE WHEN sex = 'm' THEN 'f' ELSE 'm' END [3] UPDATE Salary SET sex = CASE WHEN sex = 'm' THEN 'f' WHEN sex = 'f' THEN 'm' END [4] UPDATE Salary SET sex = CASE WHEN sex = 'm' THEN 'f'..
[MySQL] DATE_FORMAT 함수로 날짜 형식 변경하기 DATE_FORMAT 함수로 날짜 형식을 바꾸거나 원하는 부분을 가져올 수 있다 이 함수의 기본 형태는 다음과 같다 DATE_FORMAT( '형식을 바꿀 날짜', '바꿀 날짜 형식') 형식의 종류 1. 연도 year 2. 달 month 3. 일 day 4. 시간 time 5. 요일 weekday 6. 주 week 7. 기호, 단어를 형식과 조합 아래 예시에서 형식을 바꿀 날짜는 '2016-09-04 21:15:19'로 datetime 형식(문자형)의 예시 날짜이다 바꿀 날짜 형식은 '%_' 모양을 가지고 있다 형식에 대한 설명은 옆에 주석과 결과에서 확인할 수 있다 1. 연도 year SELECT '2016-09-04 21:15:19' AS somedate -- 연도 year , DATE_FORMAT('..