반응형
 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

기본 SELECT 문 연습 이후 점점 어려워지는 쿼리문제...

우측 상단에서 mysql과 oracle로 선택 가능

문제풀기 전

mysql로 문제풀었을 경우 앞에만 파란색 체크표시, oracle sql로 문제풀었을 경우 우측만 파란체크표시

둘다 풀었을 경우 아래와 같이 표시

 

1. SELECT 완료

- 상위 n개 레코드 (문법 다름)

--mysql 1건 조회 
SELECT NAME FROM ANIMAL_INS 
ORDER BY DATETIME ASC 
LIMIT 1 

--오라클 1건 조회 
SELECT * FROM 
( SELECT NAME FROM ANIMAL_INS 
ORDER BY DATETIME ASC ) 
WHERE ROWNUM =1
 

2. SUM, MAX, MIN 완료

3. GROUP BY 완료

- 동명 동물 수 찾기

* HAVING 절

- WHERE 절에서는 집계함수를 사용 할 수 없다.

- HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.

- HAVING절은 GROUP BY절과 함께 사용이 된다.

SELECT NAME, COUNT(NAME) 
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL 
GROUP BY NAME 
HAVING COUNT(NAME) >= 2 
ORDER BY NAME ASC

- 입양 시각 구하기_1 (문법 다름)

--mysql 
SELECT HOUR(DATETIME) , COUNT(DATETIME) 
FROM ANIMAL_OUTS 
WHERE HOUR(DATETIME) between '9' AND '20' 
GROUP BY HOUR(DATETIME) 
ORDER BY HOUR(DATETIME) ASC 

--오라클 SELECT TO_CHAR(DATETIME,'HH24') , COUNT(DATETIME) 
FROM ANIMAL_OUTS 
WHERE TO_CHAR(DATETIME,'HH24') between '09' AND '20' 
GROUP BY TO_CHAR(DATETIME,'HH24') 
ORDER BY TO_CHAR(DATETIME,'HH24') ASC
 

- 입양 시각 구하기_2

...level4인만큼 정말 어려워서 공부하면서 풀었다는...눙물...

* [mysql] SET

- 쿼리에서 변수설정 하려면 SET 명령을 사용하며 변수 앞에는 @를 붙임

-- 변수 초기화 
SET @HOUR :=-1; 
SELECT (@HOUR := @HOUR+1) AS HOUR , 
	( SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR ) AS COUNT 
FROM ANIMAL_OUTS WHERE @HOUR <23

 

* [ORACLE] CONNECT BY LEVEL

- 계층형 질의 구문

- CONNECT BY LEVEL 은 연속된 숫자를 조회할 때 사용하며 오라클에서만 지원

- 1~ 10까지 연속된 숫자 조회

ex ) SELECT LEVEL AS NO FROM DUAL

CONNECT BY LEVEL <= 10

-- LEFT OUTER JOIN으로 A테이블 기준 조회하며, B.CNT가 NULL인 경우 0으로 출력 
SELECT A.NUM, NVL(B.CNT,0) 
FROM ( 
	--1~23 조회 
    SELECT LEVEL-1 AS NUM FROM DUAL CONNECT BY LEVEL <=24 
    ) A 
    LEFT OUTER JOIN 
    ( 
    --각 시간대별 입양건수 조회 
    SELECT TO_CHAR(DATETIME, 'HH24') AS HOUR, COUNT(*) AS CNT 
    FROM ANIMAL_OUTS 
    GROUP BY TO_CHAR(DATETIME, 'HH24') 
    ) B 
 ON A.NUM = B.HOUR 
 ORDER BY A.NUM

+ Recent posts