[SQL] SELECT문 헷갈리는 것들 정리

·2024년 9월 21일
0

SQL

목록 보기
2/2

01. 날짜 출력 형식 바꾸기

| 2020-03-01 00:00:00 --> 2020-03-01 바꾸기 |
TO_CHAR(테이블명, 'YYYY-MM-DD')


02. 재구매한 상품 번호와 회원 구하기

[문제]
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

SELECT USER_ID
    , PRODUCT_ID
FROM ONLINE_SALE
WHERE PRODUCT_ID == (
    SELECT PRODUCT_ID
    FROM ONLINE_SALE
);

이렇게 말도 안 되게 풀었는데 같은 수/글자가 얼마나 있는지 알려면 GROUP BY를 써야지 멍청아!

[정답]

SELECT USER_ID
    , PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID
        ,PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;

03. 날짜 형식 데이터에서 값 뽑아오기

| DATE형식 데이터(예. 2020-03-18)에서 3월 생일인 사람만 출력하기 |

[첫번째 풀이 방법]
1. WHERE 절에서 바로 TO_CHAR(컬럼명, 'MM')으로 구분
-> 저장된 날짜 값에서 월(month) 부분을 추출하여 문자열로 변환하는 기능을 수행
[두번째 풀이 방법]
1. TO_CHAR(컬럼명, 형식)으로 문자열로 만든다.
2. EXTRACT(MONTH FROM 컬럼명) = '03'

중요한 건 날짜를 문자 타입으로 바꾸기 !


04. 조인

[문제]
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

제가 모르는 것 같은 건... 그 이게 그룹화를 해서 평균을 내야 하는지가 고민이거든요
근데 해결했어요
GROUP BY에 있는 건 모두 SELECT에 있어야 할 것 !!!!!

[정답]

SELECT RI.REST_ID
    , REST_NAME
    , FOOD_TYPE
    , FAVORITES
    , ADDRESS
    , ROUND(AVG(REVIEW_SCORE),2) SCORE
FROM REST_INFO RI JOIN REST_REVIEW RR
ON RI.REST_ID = RR.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS 
ORDER BY SCORE DESC, FAVORITES DESC;

05. 가장 큰 것 10개만 추출

[문제]
FISH_INFO 테이블에서 가장 큰 물고기 10마리의 ID와 길이를 출력하는 SQL 문을 작성해주세요. 결과는 길이를 기준으로 내림차순 정렬하고, 길이가 같다면 물고기의 ID에 대해 오름차순 정렬해주세요. 단, 가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없습니다.

갑자기 헷갈림.. MAX? LIMIT? 먼가 MAX는 하나만 뽑을 것같고 LIMIT은 걍 10개인 느낌.. 갑자기 이거적다가 깨달았음 ORDER BY 쓰고 LIMIT쓰기 --> ORACLE은 안 된다고 하네요 ^...^

알고 보니 MYSQL 문제 였다는

[정답]

SELECT ID
    , LENGTH
FROM FISH_INFO
WHERE LENGTH > 10
ORDER BY LENGTH DESC, ID ASC LIMIT 10;

오랜만에 해서 진짜 기본도 다 까먹었네 큰일이슈

profile
~*

0개의 댓글