wonpick
devvon
wonpick
방문자🌱
오늘
어제
  • 분류 전체보기 (146)
    • 개발 (42)
      • Spark (7)
      • Hadoop (3)
      • ML&DL (4)
      • Paper Review (0)
      • ETC (24)
    • STUDY (77)
      • Data Engineering (54)
      • Cloud (4)
      • Algorithm (5)
      • SQL (10)
      • Toy Project (1)
    • Android (2)
    • Backend (14)
    • 인턴 (0)
    • 공모전 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 데이터엔지니어링
  • 자연어처리
  • 쿠버네티스
  • 최신 데이터 인프라 이해하기
  • cka
  • Python
  • 최신 데이터 인프라 이해하기 #7
  • SQL
  • 인턴강연
  • kodekloud

최근 댓글

최근 글

티스토리

Designed By.hELLO
wonpick

devvon

[프로그래머스] SQL 코딩 챌린지  해보기_27문제
STUDY/SQL

[프로그래머스] SQL 코딩 챌린지 해보기_27문제

2021. 8. 19. 20:54

SQL 코딩 챌린지 링크

1. SELECT

## 1번_ 전체 출력
SELECT * from ANIMAL_INS
ORDER BY ANIMAL_ID

## 2번_ ANIMAL_ID별 역순 출력
SELECT NAME,DATETIME FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC 

## 3번_동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION IN ('Sick') 
ORDER BY ANIMAL_ID

## 4번_제외 시키고 출력 
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS 
WHERE NOT INTAKE_CONDITION IN ('Aged')
ORDER BY ANIMAL_ID

##5번_
SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
ORDER BY ANIMAL_ID

##6번_ORDER BY 혼합 사용
SELECT ANIMAL_ID,NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME , DATETIME DESC

##7번_개수제한
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME 
LIMIT 1

 

2.SUM, MAX, MIN

## 1번_가장 마지막에 들어온 녀석을 뽑아
SELECT MAX(DATETIME) FROM ANIMAL_INS

## 2번_가장 처음 온 녀석
SELECT MIN(DATETIME) FROM ANIMAL_INS

## 3번_보호소에 온 친구들 세기
SELECT COUNT(ANIMAL_ID) FROM ANIMAL_INS

## 4번_ 중복값 제거 카운트
SELECT COUNT(DISTINCT(NAME)) FROM ANIMAL_INS

 

3. GROUP BY

## 1번_ 고양이 개 몇마리야
SELECT ANIMAL_TYPE , COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC

## 2번_동명 동물 수 찾기
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
GROUP BY NAME 
HAVING COUNT(NAME) > 1 
ORDER BY NAME

## 3번_입양시각 구하기 
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(HOUR(DATETIME)) AS 'COUNT' 
FROM ANIMAL_OUTS 
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME) 
ORDER BY HOUR(DATETIME)

## 📌4번_입양 시각 구하기(2)📌

SET @hour = -1; # hour변수 선언 +1 통해 0~23 출력
#SET을 제외한 다른 쿼리문에서는 =을 비교 연산자로 인식 -> 대입연산자 := 사용 필요
SELECT (@hour := @hour + 1) as HOUR, 
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23

 

4. IS NULL

## 1번_이름이 없는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NULL

## 2번_이름이 있는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL

## 3번_NULL 처리하기
# SELECT ANIMAL_TYPE, REPLACE(NAME, 'NULL','No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
# ORDER BY ANIMAL_ID
## IFNULL(EX1,EX2) : 첫번째 값이 null이면 두번째 요소 반환
## NULLIF(EX1,EX2) : 첫번째, 두번째 매개값 비교 후 동일한 값 null 반환
## REPLACE : REPLACE(NAME,'NULL','No name')

SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
ORDER BY ANIMAL_ID

5. JOIN

## 1번_없어진 기록 찾기

SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_INS AS I
RIGHT JOIN ANIMAL_OUTS AS O ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID, O.NAME

## 2번_있었는데요 없었습니다

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME >  O.DATETIME
ORDER BY I.DATETIME 

## 3번_오랜 기간 보호한 동물(1)

SELECT I.NAME, I.DATETIME 
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY 2
LIMIT 3

## 4번_보호소에서 중성화한 동물

SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID 
WHERE O.SEX_UPON_OUTCOME <> I.SEX_UPON_INTAKE
ORDER BY I.ANIMAL_ID

 

6. String, Date

## 1번_루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME IN('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') 

## 2번_이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY 2

## 3번_중성화 여부 파악하기(CASE문)
SELECT ANIMAL_ID, NAME, 
    CASE 
    WHEN  SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN  'O' 
    ELSE 'X' END '중성화' 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

## 4번_오랜 기간 보호한 동물(2)
1️⃣
SELECT I.ANIMAL_ID, I.NAME 
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID  #using(ANIMAL_ID)
ORDER BY timestampdiff(minute, I.DATETIME, O.DATETIME) desc
LIMIT 2

2️⃣
SELECT I.ANIMAL_ID, I.NAME 
FROM ANIMAL_INS I
RIGHT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID  #using(ANIMAL_ID)
ORDER BY (O.DATETIME- I.DATETIME) desc
LIMIT 2

## 5번_DATETIME에서 DATE로 형 변환
SELECT I.ANIMAL_ID, I.NAME, date_format(I.DATETIME, '%Y-%m-%d') AS 날짜 FROM ANIMAL_INS I
ORDER BY I.ANIMAL_ID

'STUDY > SQL' 카테고리의 다른 글

[SQL] 날짜 년월로 group by하는 여러가지 방법들  (0) 2021.05.09
SQL 문제를 풀어보자  (0) 2021.05.09
SQL 입문하기 - 1주차  (0) 2021.05.09
MySQL 데이터베이스 한번에 끝내기  (0) 2021.05.09
[생활코딩] 관계형 데이터 모델링 (26-32강의 : 물리적데이터 모델링/역정규화)  (0) 2021.05.09
    wonpick
    wonpick

    티스토리툴바