목록SQL (30)
오랑우탄의 반란
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bSEKiK/btsIq9glCCa/WPn3E14HXwWxRy7ltkjHi0/img.png)
오늘도 오랑이는 문제를 풉니다. 1934. Confirmation Rate 조인을 활용해서 쉽게 풀 수 있는 문제입니다. SELECT s.user_id , round(ifnull(c2.confirm / c1.total,0),2) AS confirmation_rateFROM signups s left join (select user_id, count(*) as total from confirmations group by 1) c1 on s.user_id = c1.user_id left join (select user_id, count(*) as confirm from confirmations where action = 'confirmed' group by 1) c2 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxSmri/btsIsdPH9yG/nRi6tdNml7z4bdEeCa3d1k/img.png)
오늘도 오랑이는 문제를 풉니다. 기존 입양 시각 구하기 1 문제와 동일한 대신, HOUR 가 0~23까지 전부 표시되는 형식으로 출력되게 하는 문제입니다. 푸는 방법을 몰라서 오늘도 열심히 구글링 해봅니다. 입양 시각 구하기(2) 우선 기존 코드는 아래와 같습니다. 간단하죠?이렇게 하면 HOUR 가 7~19인 값에 대해서만 출력이 됩니다. IFNULL 을 사용해서 값이 없을 때 0으로 표시되도록 쿼리를 짜도, 애초에 HOUR 값이 없기 때문에 최종 결과물에 표시되지 않는 것을 보실 수 있습니다. SELECT HOUR(DATETIME) AS HOUR, IFNULL(COUNT(1),0) AS COUNTFROM ANIMAL_OUTSGROUP BY 1ORDER BY 1 그렇기 때문에 해당 문제를 풀기 위해서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cxoQ9v/btsIqTYglMP/yX5nTsjmmywVRWlQNvKkIk/img.png)
오늘도 오랑이는 문제를 풉니다. 570. Managers with at Least 5 Direct Reports 셀프조인을 사용해서 풀 수 있는 간단한 문제입니다.SELECT E1.NAMEFROM EMPLOYEE E1 JOIN EMPLOYEE E2 ON E1.ID = E2.MANAGERIDGROUP BY E1.ID, E1.NAMEHAVING COUNT(E2.MANAGERID) >= 5; 하지만 주말 동안 뇌를 비운 오랑이는 순간 착각하고 멍청한 실수를 해버립니다.HAVING COUNT(DISTINCT E2.MANAGERID) 로 작성해서 틀려버렸습니다.공통 값에 대해 JOIN 되고 GROUP BY 로 묶였기 때문에 E2.MANAGERID 칼럼의 값들은 NULL 값 제외, 그리고 E1.ID 와 E1.N..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/veVkJ/btsIn6jOl1d/fMdMbYt7mT6SswFhE7Tc6K/img.png)
테이블을 자기 자신과 조인하는 셀프 조인에 대해 알아보겠습니다. SELF JOIN은 한 테이블 내에서 칼럼 간, 개별 값 간 대조가 필요할 때 사용할 수 있습니다. 문법은 JOIN/쉼표로 연결하고 (필수) 별칭을 붙여줍니다.SELECT column_name(s)FROM table1 T1, table1 T2WHERE condition; 아래 두 가지 예시로 SELF JOIN의 활용을 살펴보겠습니다. LeetCode | 197. Rising Temperaturehttps://leetcode.com/problems/rising-temperature/ 하나의 테이블 내의 날짜 값과 온도 값에 대한 비교가 필요하기 때문에 self join 을 사용해서 이어줍니다. from weather w1 join we..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dXc0GW/btsIm4MQJQP/lj4INqEziRsTzdAqHEqVPK/img.png)
오늘도 오랑이는 문제를 풉니다. 한 번에 풀 수 있을 것처럼 생겨서 한 번에 풀리지 않아서 머리 싸맨 문제 중 하나입니다. 역시 오랑이는 아직 갈 길이 멉니다. 문제 설명 다음은 어느 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 자동차 종류 별 대여 기간 종류 별 할인 정책 정보를 담은 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블 입니다. 문제1. 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 2. 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력3. 대여 금액을 기준으..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t6XGc/btsIlXllbHu/tdkDmkqMW1zQlaqqCryShk/img.png)
오늘도 오랑이는 문제를 풉니다. 동명 동물 수 찾기 풀이 과정예전에 풀었던 문제를 다시 살펴봤습니다. 기존 쿼리와 새로 작성한 쿼리를 비교해보면 having 으로 훨씬 간편하게 푼 걸 볼 수 있습니다. 다만 두번째 풀이에서 처음에 COUNT(*) 로 해서 오답이 나왔는데, 문제에서 NULL 값은 제외하라는 조건을 유의해서 COUNT(NAME) 으로 변경해야 정답이 나옵니다. COUNT(칼럼) 은 NULL 값 제외하고 집계됨 COUNT(*) 은 NULL 값의 행도 모두 집계됨 최종 코드# AFTERSELECT NAME, COUNT(NAME) AS COUNTFROM ANIMAL_INSGROUP BY 1HAVING COUNT(NAME) >=2ORDER BY 1# BEFORESELECT NAME, COUNTF..