1. 고양이와 개는 몇 마리 있을까
문제 간단 정의
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
SELECT animal_type, count(*) as "count"
FROM animal_ins
GROUP BY animal_type
ORDER BY animal_type;
컬럼명을 그대로 쓰지 않고 별칭을 쓰려고 하면, as "별칭" 형태로 사용하면 된다.
2. 동명 동물 수 찾기
문제 간단 정의
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT name, count(name) as "COUNT"
FROM animal_ins
GROUP BY name
HAVING count(name) >= 2
ORDER BY name;
3. 입양시각 구하기(1)
문제 간단 정의
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT hour(datetime) as "HOUR", count(hour(datetime))
FROM animal_outs
WHERE hour(datetime) >= 9 and hour(datetime) <= 19
GROUP BY hour(datetime)
ORDER BY hour(datetime);
4. 입양시각 구하기(2)
문제 간단 정의
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SET @HOUR := -1;
SELECT (@HOUR := @HOUR + 1) HOUR, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR ) COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
변수를 사용해서 문제를 풀었다.
set을 통해 @변수명 = 초기화할 값 형태로 정의하였고,
where을 if문처럼 @HOUR이 23보다 작을 때 까지
Select (@HOUR := @HOUR + 1)로 반복해서 출력하게 된다.
여기서 중요한 건, = 와 :=의 구별이다.
- = -> 대입연산자, 비교연산자
- := -> SELECT @변수명 을 사용시 := 로, 대입연산자 역할
[set @변수명 := 초기화할 값]을 해도 되고, [set @변수명 = 초기화할 값]을 해도 되는데
변수를 정의했다는 것을 명시적으로 나타내기 위해서 변수를 초기화할 때 :=을 사용한다.
다만 select~from 쿼리에서는 = 이 대입연산자가 아닌 비교연산자로 사용되기 때문에, 변수로 사용하기 위해 대입연산자를 쓰려면 :=로 나타내야 한다.
https://programmers.co.kr/learn/courses/30/parts/17044
'개발자의 개발개발한 하루 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 SQL 고득점 Kit] Level 2~3 String, Date 풀이 5문제 (0) | 2021.08.23 |
---|---|
[프로그래머스 SQL 고득점 Kit] Level 3, 4 JOIN 풀이 4문제 (0) | 2021.08.23 |
[프로그래머스 SQL 고득점 Kit] Level 1~2 IS NULL 풀이 3문제 (0) | 2021.08.23 |
[프로그래머스 SQL 고득점 Kit] Level 1~2 SUM, MAX, MIN 풀이 4문제 (0) | 2021.08.18 |
[프로그래머스 SQL 고득점 Kit] Level1 Select 풀이 7문제 (0) | 2021.08.18 |
댓글