[JAVA_Back-End]

[MySQL] SELECT 데이터 추출하기3 본문

SQL

[MySQL] SELECT 데이터 추출하기3

너굴위 2024. 3. 27. 14:50
728x90
반응형

1. 과일로 만든 아이스크림 고르기

코딩테스트 연습 - 과일로 만든 아이스크림 고르기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

Tip. INNER JOIN : 두 테이블에서 같은 값만 조인

SELECT 컬럼명 FROM 테이블명1 INNER JOIN 테이블명2 ON 조인 조건;

=> JOIN하는 두 개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져온다.

 

 

결과

SELECT A.FLAVOR 
FROM FIRST_HALF AS A INNER JOIN ICECREAM_INFO AS B ON A.FLAVOR = B.FLAVOR 
WHERE A.TOTAL_ORDER >= 3000 
AND B.INGREDIENT_TYPE LIKE 'fruit_based';

2.  자동차 대여 기록에서 장기/단기 대여 구분하기

코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

Logic

1)  출력 내용 먼저 출력하기

※ 별칭, WHERE 조건, 정렬방식 등

 

2) CASE WHEN ~ THEN~ ELSE~ END~ 사용하여 조건 별 다른 출력 나타내기

=> MySQL에서 CASE문은 프로그래밍 언어에서 스위치(switch)문과 비슷하나, 다수의 조건에 하나의 반환 값은 아니다.

CASE WHEN 조건1 THEN 조건1에 대한 반환값 WHEN 조건2 THEN 조건2에 대한 반환값 ELSE 나열한 조건에 해당 안되는 경우 반환값 END;

- WHEN과 THEN은 한쌍

- WHEN과 THEN은 여러개 있을 수 있다.

- ELSE가 존재하면 모든 조건에 해당하지 않는 경우에 반환 값 설정 가능

- ELSE가 존재하지 않고, 조건에 맞지 않아서 반환값이 없다면 NULL반환

 

※ CASE WHEN~THEN~ ELSE~ END~는 어떠한 쿼리값을 다른 형식으로 나타내고 싶을 때 혹은 해당 쿼리값에 조건을 달아 조건에 일치하면 다른 값으로 나타내도록 할 때 사용한다.

 

 

3) 날짜 차이 구하기 (DAY차이 구할 때)

DATEDIFF(날짜1, 날짜2);

 

+) 연(year), 월(month), 시간(hour), 초(second) 등을 지정하여 구할 때는 TIMESTAMPDIFF함수를 사용한다.

TIMESTAMPDIFF(단위, 날짜1, 날짜2);

단위의 종류(참고)

SECOND: 초

MINUTE: 분

HOUR: 시간

DAY: 일

WEEK: 주

MONTH: 월

QUARTER: 분기

YEAR: 연도

 

 

결과

SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE,'%Y-%m-%d') AS START_DATE, DATE_FORMAT(END_DATE,'%Y-%m-%d') AS END_DATE,
CASE WHEN DATEDIFF(end_date, start_date)+1 >= 30 THEN '장기 대여' ELSE '단기 대여'
            END AS RENT_TYPE 
            FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
            WHERE START_DATE LIKE '2022-09%'
            ORDER BY HISTORY_ID DESC;

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

코딩테스트 연습 - 고양이와 개는 몇 마리 있을까 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

Logic

1)  그룹화하여 데이터 조회하기

=> 유형별로 갯수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용

=> 특정 컬럼을 그룹화 할 때는 GROUP BY

=> 특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING

SELECT 컬럼명 FROM 테이블명 GROUP BY 그룹화할 컬럼;

ex) 여러 타입을 그룹화하여 각 그룹의 사람 수를 구하기

SELECT type, COUNT(name) AS cnt FROM people GROUP BY type;

 

 

2) 주어진 집합 중 하나와 일치하는 레코드를 검색하기

※ WHERE ~ IN ~으로 ANIMAL_TYPE중 CAT과 DOG에 대해서만 수행할 수 있도록 조건을 건다.

WHERE 컬럼명 IN (집합1, 집합2)

 

결과

SELECT ANIMAL_TYPE, COUNT(*) AS COUNT FROM ANIMAL_INS WHERE ANIMAL_TYPE IN ('CAT', 'DOG') GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE ASC;

해석

=> ANIMAL_TYPE로 묶으면 CAT과 DOG로 묶인다. 각각의 그룹 안에서 쿼리가 실행되기 시작.

=> CAT측면으로만 보면 ANIMAL_TYPE는 CAT밖에 없고 COUNT(*) 전체를 하면 CAT수만 카운트 된다. 반대로 DOG의 경우에도 동일하게 적용될 수 있다.

=> ANIMAL_TYPE를 오름차순으로 정렬하여 CAT이 DOG보다 먼저 나올 수 있도록 한다. (C>D)

728x90
반응형

'SQL' 카테고리의 다른 글

[DB] Exclusive Lock / Shared Lock  (0) 2025.03.22
[MySQL] SELECT 데이터 추출하기2  (0) 2024.03.25
[MySQL] SELECT 데이터 추출하기  (0) 2024.03.20
[DATABASE] 정리  (0) 2023.09.22
[DATABASE] 인덱스 / 사용자 생성 + 권한 부여  (0) 2023.09.08