Blue___
코딩배우는 학생🌎
Blue___
전체 방문자
오늘
어제
  • 코딩배우는 학생🧀 (242)
    • Algorithms (145)
      • BOJ[Java] (107)
      • Programmers[Java] (32)
      • Coding_Contest (3)
    • Web (22)
      • .NET Core C# (2)
      • Java (1)
      • Oracle SQL (7)
      • Web-ProJect (3)
      • Error처리 (1)
      • Web지식 (4)
      • Javascript (1)
      • Vue (3)
    • Git (4)
    • Java_beginner(Repl.it) (55)
      • Auto-Graded-Course(AP CS A) (54)
    • 프로젝트 직딩일기 (3)
    • Hanyang_Assignment (0)
    • 이모저모 (4)
      • 잡담 (1)
      • 2021 오픈소스 컨트리뷰터 아카데미 (1)
      • DDD - 6기! (1)
    • 북리뷰 (1)
      • 리팩토링 2판 (1)
      • 클린코드 (0)

블로그 메뉴

  • 🐰GITHUB
  • ☘️포트폴리오
  • 🌸MBC개발_투표 2022
  • 🍭MBC_APP

공지사항

인기 글

태그

  • auto-graded course
  • 자바
  • Bakjoon
  • algorithm
  • programmers
  • 코딩
  • REPL
  • java basic
  • 코딩배우는학생
  • Java
  • 프로그래밍
  • 알고리즘
  • 레플릿
  • repl.it
  • AP CS A
  • coding
  • Java tutorial
  • 코딩배우는 학생
  • 백준
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO
Blue___

코딩배우는 학생🌎

Web/Oracle SQL

[PROGRAMMERS Level 4] 우유와 요거트가 담긴 장바구니(Summer/Winter Coding(2019)) [Oracle]

2020. 3. 29. 18:25

문제 설명

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가격을 나타냅니다.

NAME TYPE
ID INT
CART_ID INT
NAME VARCHAR
PRICE INT

데이터 분석 팀에서는 우유와 요거트를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

 

예시

예를 들어 CART_PRODUCTS 테이블이 다음과 같다면

 

CART_PRODUCTS 테이블

ID CART_ID NAME PRICE
5488 83 알루미늄 호일 2980
8435 83 우유 1880
5489 286 반찬류 3700
5491 286 요거트 2980
5504 286 우유 1880
8437 448 요거트 2980
8454 448 우유 1880
5490 1034 케첩 1380
5492 1034 일회용품 1080
  • 83번 장바구니에는 우유만 있고 요거트가 없습니다.
  • 286번 장바구니에는 우유와 요거트가 모두 있습니다.
  • 448번 장바구니에는 우유와 요거트가 모두 있습니다.
  • 1034번 장바구니에는 우유와 요거트가 모두 없습니다.

따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

CART_ID
286
448

 

풀이

1.SELF JOIN

1
2
3
4
5
SELECT DISTINCT C.CART_ID 
FROM CART_PRODUCTS C, CART_PRODUCTS T
    WHERE C.CART_ID = T.CART_ID 
        AND (C.NAME ='우유' AND T.NAME ='요거트')
            ORDER BY C.CART_ID
 

 

셀프조인을 이용해서 풀이해 주었다. 자신의 테이블을 두개를 ID를 기준으로 조인한 뒤에 우유와 요거트가 함께 존재한다면 둘다 출력한뒤 DISTINCT를 이용해 중복제거 해서 반환해주었다.

 

다른 풀이방법도 궁금해서 찾아보았다.

 

2. INTERSECT

 

다른 풀이방법으로는 교집합(INTERSECT)를 이용해도 풀이할 수 있다

 

1
2
3
4
5
6
7
8
SELECT CART_ID
  FROM CART_PRODUCTS
 WHERE NAME = '우유' 
INTERSECT
SELECT CART_ID
  FROM CART_PRODUCTS
 WHERE NAME = '요거트'
 ORDER BY CART_ID
 

우유를 가지는 ID를 추출한 테이블, 같은 방식으로 요거트를 가진 ID를 추출한 테이블의 교집합을 구하면 해결된다.

 

3. SubQuery

 

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    CART_ID
FROM
    CART_PRODUCTS
WHERE CART_ID IN ( SELECT
                        CART_ID
                   FROM
                        CART_PRODUCTS
                   WHERE
                        NAME = '우유')
      AND NAME = '요거트'
ORDER BY CART_ID ASC;
 

 

WHERE절에 그냥 NAME을 단순 2개를 비교하는 조건은 없기때문에 서브쿼리로 하나를 구해준뒤 비교해주는 형식으로 풀이하였다.

 

https://programmers.co.kr/learn/courses/30/lessons/62284

 

프로그래머스

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

programmers.co.kr

 

반응형
저작자표시 (새창열림)

'Web > Oracle SQL' 카테고리의 다른 글

[PROGRAMMERS Level-4] 보호소에서 중성화한 동물 [Oracle]  (0) 2020.03.29
[PROGRAMMER Level-4] 입양 시각 구하기(2)[Oracle]  (0) 2020.03.29
[SQL] 변환함수,서식지정자  (0) 2020.03.27
[SQL] 함수(Functions)  (0) 2020.03.27
[SQL] 정의와 기본문법  (0) 2020.03.27
    'Web/Oracle SQL' 카테고리의 다른 글
    • [PROGRAMMERS Level-4] 보호소에서 중성화한 동물 [Oracle]
    • [PROGRAMMER Level-4] 입양 시각 구하기(2)[Oracle]
    • [SQL] 변환함수,서식지정자
    • [SQL] 함수(Functions)
    Blue___
    Blue___
    완전 연소한 불은 재를 남기지않는다 : 코딩배우는학생 🌎

    티스토리툴바