01 고양이와 개는 몇 마리 있을까
IN 조건 또는 OR 조건으로 다양하게 풀이 가능
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat', 'Dog')
GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE;
or
SELECT ANIMAL_TYPE,count(*) as 'count' FROM ANIMAL_INS
WHERE ANIMAL_TYPE='Cat' or ANIMAL_TYPE='Dog'
GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE
02 동명 동물 수 찾기
GROUP 으로 묶은 결과 자체에 대해 조건을 걸려면?
- WHERE가 아니라 HAVING절 사용
SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS
WHERE NAME != ''
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
03 입양 시각 구하기(1)
SQL datetime에서 특정 값만 추출하려면 함수사용
// 기본적으로 datetime = 'yyyy-mm-dd hh:mm:ss'
// 오늘 날짜 : 2021-06-22 14:25:30
YEAR(DATETIME) //2021
MONTH(DATETIME) //06
DAY(DATETIME) //22
HOUR(DATETIME) //14
MINUTE(DATETIME) //25
SECOND(DATETIME) //30
따라서
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR;
04 입양 시각 구하기(2)
문제의 조건을 보면, 특정 시간에 해당하는 데이터가 없어도 0으로 출력해야 한다 => 그냥 group by는 못씀
따라서 변수를 만들어 0~23까지 돌면서 풀 수 있다
SET @T = -1; #0부터 시작해서 23까지 갈 것
SELECT
(@T := @T+1) AS 'HOUR',
(SELECT COUNT(*) FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @T) AS 'COUNTS'
FROM ANIMAL_OUTS
WHERE @T < 23;
- SET : 변수 설정 명령어
- @ : 변수 앞에 쓰이는 기호
- 코드를 보면, -1에서 시작해서 23직전까지(22)까지 돌아간다
- 그러면 안쪽 select에서 @T := @T+1로 카운트를 올려준다
- 0~23까지 변수에 들어간다
- 해당 변수값과 같은 시간대의 데이터를 센다(Count)
'Problem Solving > Programmers' 카테고리의 다른 글
[ SQL 고득점 kit ] String, Date - mysql (0) | 2021.06.26 |
---|---|
[ SQL 고득점 kit ] JOIN - mysql (0) | 2021.06.25 |
[ SQL 고득점 kit ] IS NULL - mysql (0) | 2021.06.23 |
[ SQL 고득점 kit ] SUM, MAX, MIN - mysql (0) | 2021.06.22 |
[ SQL 고득점 kit ] SELECT - mysql (0) | 2021.06.21 |
댓글