목록SQL (23)
tak's data blog
SQL 레시피 책을 공부하면서 현업에서 쓰일법한 코드들을 타이핑 해두었고,빠르게 필요할 때마다 보기 위해서 다음과 같이 정리해두었다. 한번 훑어보긴 했지만 아직 직접 적용해보지 못한 코드가 있어서 추후에 다시 작성해야겠다.-- 사용자의 방문 빈도 집계하기WITHaction_log_with_dt AS (SELECT * ,SUBSTR(STAMP, 1, 10) AS dt FROM action_log),action_day_count_per_user AS (SELECT user_id ,COUNT(DISTINCT dt) AS action_day_count FROM action_log_with_dt WHERE dt BETWEEN '2016-11-01' AND '2016-1..
이번에는 SQL 복습을 위해 리트코드 SQL 50제에서 문제를 풀어보았다. 해커랭크, 리트코드, 프로그래머스에 있는 대부분의 SQL문제는 풀어보았는데도 예상치 못한(풀어보지 못한) 문제가 나와서 당황했던 기억이 있다. 그래서 직접 풀이한 코드와 다른 사람들이 작성한 코드를 보며 복습해보기로 했다. 추후에는 데이터분석을 위한 SQL 레시피 책을 통해 공부할 예정이다. 1934. Confirmation Rate # 내풀이 WITH total AS ( SELECT user_id, SUM(CASE WHEN action = 'timeout' THEN 0 ELSE 1 end) AS confirmation, COUNT(*) AS confirmation_cnt FROM confirmations GROUP BY 1) S..
#1795 select * from (select product_id, 'store1' as store, store1 as price from Products union select product_id, 'store2' as store, store2 as price from Products union select product_id, 'store3' as store, store3 as price from Products) t where price is not null store1, store2, store3 각각의 칼럼을 전체적인 store과 price로 피벗테이블로 만드는 것과 동일한 문제이다. 각각의 store칼럼별로 새롭게 테이블을 만든 후 union으로 결합해 해결할 수 있다. 여기까지 무료로 제..
#1393 SELECT stock_name, SUM( CASE WHEN operation = 'Buy' THEN -price ELSE price END) AS 'capital_gain_loss' FROM Stocks GROUP BY stock_name 물품별 총 판매 + 구매 가격을 구하는 문제이다. case when으로 조건을 주어 총합을 구할 수 있었다. 아래는 일부러 꼬아서 with문을 통해 판매한 물품 테이블, 구매한 물품 테이블을 따로 구해서 합을 구한 방법이다. 아래의 방법은 추후에 어려운 문제들이 나오고 테이블 생성이 필요할 때 언젠가 쓰이지 않을까 생각해보았다. # Write your MySQL query statement below WITH MINUS AS (SELECT stock_nam..
#626 연속된 id 2개를 바꾸는 문제이다. 특이 조건으로 홀수행으로 끝나면 마지막 행은 그대로 둔다는 점이다. SELECT (CASE WHEN id % 2 != 0 and counts != id THEN id + 1 WHEN id % 2 != 0 and counts = id THEN id ELSE id -1 END )AS id, student FROM Seat, (SELECT count(*) as 'counts' FROM Seat ) as s_count order by id asc 처음 마지막 행 조건을 안두고 풀었을 땐 잘 풀렸는데 마지막 조건을 생각하느라 시간이 걸렸다. 서브쿼리로 따로 count 테이블을 만들어주고 id 갯수와 원래 테이블과의 마지막 id숫자가 같은지 다른지 조건을 주어 해결하였..
이번 문제를 풀면서 테스트케이스는 다맞췄는데 실제로 제출해보니 정답이 아니였다. #262 # Write your MySQL query statement below WITH A as ( SELECT t.request_at as 'Arequest', count(t.request_at) as 'Acount' FROM Trips t join Users u on t.client_id = u.users_id WHERE u.banned != "Yes" GROUP BY t.request_at ) ,B as ( SELECT t.request_at as 'Brequest', count(t.status) as 'Bcount' FROM Trips t join Users u on t.client_id = u.users_id W..
# 184 SELECT d.name as 'Department', e.name as 'Employee', e.salary as 'Salary' FROM Employee e inner join Department d on e.departmentId = d.id WHERE (e.departmentId, e.salary) in ( SELECT departmentId, MAX(salary) FROM Employee GROUP BY departmentId ) # 서브쿼리없이 바로 groupby를 해버리면 안됨. 처음 바로 groupby를 해서 id별 max(salary)를 구하지 못함 where절에 서브쿼리없이 바로 groupby를 해버려서 id별 max(salary)를 구하지못했다. 솔루션의 도움을 받아 해결완..
리트코드 SQL문제는 단계별로 주어진 날짜에 따라 정해진 문제를 푸는 형식이 있고, 결제없이 무료로 제공되는 문제들이 있다! 예전에도 풀어보았지만 반복적으로 학습해야 순간적인 상황에 대처할 수 있으므로 복습을 해보겠다! #176 SELECT max(salary) as 'SecondHighestSalary' FROM Employee WHERE salary != (SELECT max(salary) FROM Employee) # != 말고도 not in 등으로 대체가 가능하다! #178 Select score, Dense_rank() Over (Order By Score Desc) `Rank` From Scores # Dense_rank () 뒤에 항상 over를 빼먹는다 실수를 줄여야지 #180 SELECT..