프로그래머스 입양 시각 구하기 (2)
by daramiGROUP BY를 했는데, COUNT가 0인 경우도 포함해줘야 하는 경우 다양한 대처법
프로그래머스 입양 시각 구하기(2)
- 처음 풀이
SELECT HOUR(DATETIME) AS HOUR ,COUNT(DISTINCT ANIMAL_ID) AS COUNT FROM ANIMAL_OUTS GROUP BY 1 ORDER BY 1
- 여기서 문제는 0~23시까지, 카운트가 없는 HOUR도 테이블을 만들어 줘야 한다는 것...!
그러면 아 0~24까지의 HOUR 칼럼을 만들어야 겠네..! 라는 생각이 든다
- 이 경우 아래 리트코드 문제 처럼 노가다로 UNION ~ 으로 23까지 숫자를 만드는 노가다도 할 수 있겠지만..Python이 아니라서 반복문 못쓴다고 해도 다른 방법이 있지 않을까..? 하는 생각이 들었다.
- SET 변수 쓰기
SET 이란..?
SET¶
SET 문은 시스템 파라미터의 값을 지정하거나 사용자 정의 변수의 값을 지정하는 구문이다.
출처
SET @HOUR := -1;
-- HOUR라는 사용자 정의 변수를 할당한다.
-- 왜 -1로 먼저 정의하는가? 값을 0부터 만들어주고 싶기 때문에
SELECT (@HOUR := @HOUR +1) AS HOUR
-- 1씩 더해준다.
,(SELECT COUNT(DISTINCT ANIMAL_ID)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME)=@HOUR
) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
-- @HOUR <23 로 조건절을 끊는 이유는 해당 22일 때 까지 1씩 더해주기 때문
참고, [프로그래머스] 입양 시각 구하기(1), (2) (GROUP BY, HAVING, SET)
[프로그래머스] 입양 시각 구하기(1), (2) (GROUP BY, HAVING, SET)
[프로그래머스] 입양 시각 구하기(1), (2)
chanhuiseok.github.io
리트코드 1907. Count Salary Categories
- 처음 풀이
-
SELECT(CASE WHEN income <20000 THEN 'Low Salary' WHEN income >=20000 AND income <50000 THEN 'Average Salary' WHEN income >=50000 THEN 'High Salary' ELSE NULL END )AS category ,COUNT(account\_id) AS accounts\_count FROM Accounts GROUP BY category
Try running the inner query and see the output.
As there is no account_id with salary as Average Salary, the inner query will not return 'Average Salary' as a category. So, when you group by category in the outer query, there is no such category as 'Average Salary' to result in output.
0인 카테고리를 포함하려면 해당 CASE 절을 쓰지 못한다.
따라서 UNION을 사용해서 LOW,HIGH,AVERAGE 칼럼을 만들어주고, 여기에 붙이는 방식으로 사용할 수 있다.
- 두번째 풀이
https://chobopark.tistory.com/117WITH CTE AS( SELECT account\_id ,(CASE WHEN income <20000 THEN 'Low Salary' WHEN income >50000 THEN 'High Salary' ELSE 'Average Salary' END )AS category FROM Accounts ) ,CTE\_T AS( SELECT 'Low Salary' AS Category UNION SELECT 'High Salary' AS Category UNION SELECT 'Average Salary' AS Category ) SELECT CTE\_T.Category AS category ,COUNT(account\_id) AS accounts\_count FROM CTE\_T LEFT JOIN CTE ON CTE.category=CTE\_T.Category GROUP BY CTE\_T.Category
inclusive range
- And an inclusive range is one where the limits are included along with what lies in between: a survey of “20-40 year-olds, inclusive” tells us 20 and 40 year-olds were counted, too.
'SQL > HackerRank,프로그래머스' 카테고리의 다른 글
프로그래머스 조건에 맞는 사용자 정보 조회하기,조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (Mysql) (0) | 2023.03.19 |
---|---|
프로그래머스 sql 문제 풀이로 기본 다지기 (0) | 2022.10.10 |
[HackerRank] The PADS 문제풀이 MSsql (0) | 2022.06.13 |
[HackerRank] Symmetric Pairs mysql (0) | 2022.05.22 |
[HackerRank] SQL Project Planning mysql 문제 풀이 (0) | 2022.05.20 |
블로그의 정보
다람
darami