코북
Keep going
코북
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • Computer Science (20)
      • 인터넷 (10)
      • 운영체제 및 일반지식 (4)
      • 공통 요구사항 (4)
      • WAS (2)
    • DataBase (18)
    • JavaScript (22)
    • Spring (15)
    • Java (4)
    • ASP.NET (5)
    • C# (6)
    • 알고리즘 (8)
    • HTML5 + CSS (5)
    • Git & GitHub (5)
    • Machine Learning (5)
    • 좋은 글 공유 (1)

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
코북

Keep going

[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#1
DataBase

[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#1

2022. 3. 2. 15:27

 

 안녕하세요 코북입니다. 오늘은 프로그래머스에서 SQL 기본 문제들을 풀어봤습니다. 쉬운 문제라도 실제로 생각하고 적으면서 풀어보는 것과 눈으로만 보는 것은 큰 차이가 있는 것 같습니다. 오랜만에 문제 풀면서 재밌고 유익한 시간이었습니다. 너무 쉬운 문제들은 가져오지 않았고, ★이 있는 문제들은 틀렸거나 놓친 부분이 있는 문제들이었습니다. 

 

1. SELECT

 

1-1. ★ 어린 동물 찾기, NOT IN 

동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION NOT IN ('Aged')
ORDER BY ANIMAL_ID


1-2. 여러 기준으로 정렬하기

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC


1-3. 상위 N개 레코드, LIMIT

 

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

 

MySQL

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

MSSQL

SELECT top 1 NAME
FROM ANIMAL_INS
ORDER BY DATETIME

 

2. SUM, MAX, MIN

 

2-1. ★ 최댓값 구하기, MAX

가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT MAX(DATETIME) AS '시간'
FROM ANIMAL_INS


2-2. 최솟값 구하기, MIN 

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT MIN(DATETIME) AS '시간'
FROM ANIMAL_INS


2-3. 중복 제거하기, DISTINCT


동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

SELECT COUNT(DISTINCT NAME) AS 'count'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

 

3. GROUP BY

 

3-1. ★ 고양이와 개는 몇 마리 있을까

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) AS 'count'
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat','DoG')
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

놓친 점 : IN을 사용하지 않고 풀었습니다. 문제를 꼼꼼하게 봐야겠습니다..


3-2. 동명 동물 수 찾기

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

SELECT NAME, COUNT(NAME) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT >= 2
ORDER BY NAME


3-3. 입양 시각 구하기(1)

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR < 20
ORDER BY HOUR
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 
AND HOUR(DATETIME) < 20
GROUP BY HOUR
ORDER BY HOUR


3-4. ★★ 입양 시각 구하기(2), 재귀

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

WITH RECURSIVE TEMP_TABLE AS(
SELECT 0 AS H
UNION ALL
SELECT H+1 
FROM TEMP_TABLE 
WHERE H<23)

SELECT H, COUNT(ANIMAL_ID)
FROM TEMP_TABLE 
    LEFT JOIN ANIMAL_OUTS
    ON HOUR(DATETIME) = TEMP_TABLE.H
GROUP BY H
ORDER BY H

 

 

 

저작자표시 비영리 (새창열림)

'DataBase' 카테고리의 다른 글

[MSSQL/MySQL] 비교 연산자 <>, !=  (0) 2022.03.29
[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#2  (0) 2022.03.03
[MSSQL] 인덱스(INDEX) #1 + 페이지(Page)  (0) 2022.02.28
[MSSQL] 트랜잭션과 @@TRANCOUNT  (0) 2022.02.25
[MSSQL] 프로시저 (PROCEDURE)  (0) 2022.02.24
    'DataBase' 카테고리의 다른 글
    • [MSSQL/MySQL] 비교 연산자 <>, !=
    • [MySQL/MSSQL] 프로그래머스 SQL문제 풀이#2
    • [MSSQL] 인덱스(INDEX) #1 + 페이지(Page)
    • [MSSQL] 트랜잭션과 @@TRANCOUNT
    코북
    코북

    티스토리툴바