몸과 마음이 건전한 SW 개발자

프로그래머스 SQL 고득점 Kit Lv. 2 SELECT 2문제 모음 본문

SQL

프로그래머스 SQL 고득점 Kit Lv. 2 SELECT 2문제 모음

스위태니 2024. 1. 1. 00:18

1. 3월에 태어난 여성 회원 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/131120

 

프로그래머스

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

programmers.co.kr

SELECT
    MEMBER_ID,
    MEMBER_NAME,
    GENDER,
    DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d") AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE 
    MONTH(DATE_OF_BIRTH) = 3 AND
    TLNO IS NOT NULL AND
    GENDER = "W"
ORDER BY MEMBER_ID;

Key Point

MONTH 함수

문법 : MONTH(날짜)

설명 : 해당 날짜의 월이 출력

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

https://school.programmers.co.kr/learn/courses/30/lessons/131536

 

프로그래머스

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

programmers.co.kr

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

Key Point

GROUP BY, HAVING 구문

GROUP BY

  • 목적: GROUP BY 절은 선택한 열(여기서는 USER_ID와 PRODUCT_ID)에 기반하여 결과 세트를 그룹으로 나눕니다. 즉, 동일한 USER_ID와 PRODUCT_ID 값을 가진 행들을 하나의 그룹으로 묶습니다.
  • 사용: 이 경우, 각 사용자(USER_ID)와 각 제품(PRODUCT_ID)에 대해 그룹을 만듭니다. 이렇게 하면 같은 사용자가 같은 제품을 구매한 모든 경우를 하나의 그룹으로 볼 수 있습니다.
  • 결과: GROUP BY는 주로 집계 함수(예: COUNT(), SUM(), AVG() 등)와 함께 사용됩니다. 각 그룹에 대해 이러한 함수를 적용하여 그룹별 통계 또는 정보를 얻을 수 있습니다.

HAVING

  • 목적: HAVING 절은 GROUP BY로 생성된 그룹에 조건을 적용하여 그 중 특정 조건을 만족하는 그룹만을 선택하기 위해 사용됩니다. 이는 WHERE 절과 비슷하지만, WHERE는 개별 행에 대한 조건을 설정하는 반면, HAVING은 그룹에 대한 조건을 설정합니다.
  • 사용: 이 쿼리에서 HAVING COUNT(*) >= 2는 각 그룹(특정 사용자와 특정 제품 조합)의 레코드 수가 2개 이상인 경우에만 해당 그룹을 결과에 포함시킵니다. 즉, 동일한 제품을 2회 이상 구매한 사용자만을 대상으로 합니다.
  • 차이점: WHERE 절은 데이터를 그룹화하기 전에 개별 행을 필터링하는 반면, HAVING은 그룹화된 후에 그룹을 필터링합니다. 따라서 집계 함수와 함께 조건을 적용할 때는 HAVING을 사용해야 합니다.

예시:

다음과 같은 쿼리를 고려해보겠습니다:

SELECT 열1, 열2, COUNT(*)
FROM 테이블
GROUP BY 열1, 열2
HAVING COUNT(*) > 10;

여기서:

  • GROUP BY 열1, 열2: 테이블의 데이터를 열1과 열2의 조합별로 그룹화합니다.
  • HAVING COUNT(*) > 10: 각 그룹에 10개 이상의 레코드가 있는 경우에만 해당 그룹을 결과에 포함시킵니다.

이 쿼리는 테이블에서 열1과 열2의 조합으로 그룹을 만들고, 각 그룹의 레코드 수가 10개를 초과하는 그룹의 열1, 열2 값과 그룹의 레코드 수를 반환합니다.

정리:

  • GROUP BY는 열 기반으로 데이터를 그룹화합니다.
  • HAVING은 그룹화된 결과에 대한 조건을 지정합니다.
  • GROUP BY와 HAVING은 열 이름에 대해 사용되며, 테이블 이름 자체가 아닌 특정 열을 지칭합니