SQL/프로그래머스 SQL 고득점 kit
SQL 고득점 Kit / 입양 시각 구하기(2) / MySQL (변수선언 , SELECT문 서브쿼리)
박혀노
2023. 10. 31. 14:51
728x90
📚문제
📝풀이
SET @HOUR = -1 # 변수 선언문
SELECT (@HOUR := @HOUR +1) AS HOUR # := 대입연산자, = 비교 연산자
, (SELECT COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE DATETIME = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
갑자기 난이도가 확 올랐다
SQL 문제풀이에서 변수선언은 처음해보는 것 같다
1번째 코드
1) SET 명령어를 통해서 선언해주며
2) 변수 앞에 @를 붙인다
3) 참고로 변수 선언시에는 대입연산자(:=)와 비교연산자(=) 중 아무거나 사용해도 상관없다
2번째 코드
대입연산자(:=)를 통해 HOUR +1 을 대입해 나간다 (0부터 시작)
3-5번째 코드
SELECT 서브쿼리(= 스칼라 쿼리)* 생성
(SELECT COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE DATETIME = @HOUR) AS COUNT
ANIMAL_OUTS 테이블에서
DATETIME이 @HOUR랑 똑같은 시간대(0~23시)일때의
행 수 반환
=>
@HOUR 시간대(0~23시)일때 입양 수가 총 몇건이냐?
7번째 코드
변수 @HOUR가 22가 될때까지 진행
(HOUR가 22가 되면 SELECT문의 AS HOUR 에는 HOUR+1(=23)까지 할당됨)
++ SELECT 서브쿼리절 예시
# SELECT 절 서브쿼리 예시
# OUTER JOIN 사용 시
SELECT T1.EX_CD ,T2.BAS_CD_NM EX_CD_NM
FROM STOCK T1
LEFT OUTER JOIN BASECODE T2
ON (T2.BAS_CD_DV = 'EX_CD' AND T2.BAS_CD = T1.EX_CD)
# SELECT절 서브쿼리 사용 시
SELECT T1.EX_CD
,(SELECT A.BAS_CD_NM FROM BASECODE A
WHERE A.BAS_CD_DV = 'EX_CD' AND A.BAS_CD = T1.EX_CD) EX_CD_NM
FROM STOCK T1
SELECT 서브쿼리(=스칼라 서브쿼리) 작성 시
1. JOIN할 테이블을 FROM절에 작성
FROM BASECODE A
2. WHERE절에 JOIN조건으로 넣을 항목 작성
ON (T2.BAS_CD_DV = 'EX_CD' AND T2.BAS_CD = T1.EX_CD)
↕
WHERE A.BAS_CD_DV = 'EX_CD' AND A.BAS_CD = T1.EX_CD
SELECT 서브쿼리는 단일 값(=스칼라 값)을 반환
728x90