[SQL 고득점 Kit] SELECT (2)

    1. 재구매가 일어난 상품과 회원 리스트 구하기

    [문제 설명]
    다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
    동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
    Column name Type Nullable
    ONLINE_SALE_ID INTEGER FALSE
    USER_ID INTEGER FALSE
    PRODUCT_ID INTEGER FALSE
    SALES_AMOUNT INTEGER FALSE
    SALES_DATE DATE FALSE
    [문제]
    ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
    SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE
    GROUP BY USER_ID, PRODUCT_ID
    HAVING COUNT(PRODUCT_ID) > 1
    ORDER BY USER_ID, PRODUCT_ID DESC;

    2. 모든 레코드 조회하기

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
    SELECT *
    FROM ANIMAL_INS 
    ORDER BY ANIMAL_ID;

    3. 역순 정렬하기

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요.
    SELECT NAME, DATETIME
    FROM ANIMAL_INS 
    ORDER BY ANIMAL_ID DESC;

    4. 오프라인/온라인 판매 데이터 통합하기 🔥

    [문제 설명]
    다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 
    ONLINE_SALE 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다. 동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
    Column name Type Nullable
    ONLINE_SALE_ID INTEGER FALSE
    USER_ID INTEGER FALSE
    PRODUCT_ID INTEGER FALSE
    SALES_AMOUNT INTEGER FALSE
    SALES_DATE DATE FALSE
    OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다. 동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다. 동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
    Column name Type Nullable
    OFFLINE_SALE_ID INTEGER FALSE
    PRODUCT_ID INTEGER FALSE
    SALES_AMOUNT INTEGER FALSE
    SALES_DATE DATE FALSE
    [문제]
    ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
    (SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
    FROM OFFLINE_SALE 
    WHERE DATE_FORMAT(SALES_DATE, '%m') = '03')
    UNION ALL
    (SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
    FROM ONLINE_SALE
    WHERE DATE_FORMAT(SALES_DATE, '%m') = '03')
    ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

     

    5. 아픈 동물 찾기

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS 
    WHERE INTAKE_CONDITION = 'Sick'
    ORDER BY ANIMAL_ID;

    6. 어린 동물 찾기

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS 
    WHERE INTAKE_CONDITION != 'Aged'
    ORDER BY ANIMAL_ID;

    7. 동물의 아이디와 이름

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS 
    ORDER BY ANIMAL_ID ASC;

    8. 여러 기준으로 정렬하기

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS 
    ORDER BY ANIMAL_ID ASC;

     

    9. 상위 n개 레코드

    [문제 설명]
    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
    Name Type Nullable
    ANIMAL_ID VARCHAR(N) FALSE
    ANIMAL_TYPE VARCHAR(N) FALSE
    DATETIME DATETIME FALSE
    INTAKE_CONDITION VARCHAR(N) FALSE
    NAME VARCHAR(N) TRUE
    SEX_UPON_INTAKE VARCHAR(N) FALSE
    [문제]
    동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
    SELECT NAME
    FROM ANIMAL_INS
    ORDER BY DATETIME
    LIMIT 1;

    10. 조건에 맞는 회원수 구하기

    [문제 설명]
    다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다. GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.
    Column name Type Nullable
    USER_ID INTEGER FALSE
    GENDER TINYINT(1) TRUE
    AGE INTEGER TRUE
    JOINED DATE FALSE
    [문제]
    USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
    SELECT COUNT(USER_ID) AS USERS
    FROM USER_INFO 
    WHERE DATE_FORMAT(JOINED, '%Y') = '2021'
    AND AGE BETWEEN 20 AND 29

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    'SQL' 카테고리의 다른 글

    [SQL 고득점 Kit] SELECT (1)  (0) 2023.08.02

    댓글