데이터 분석 - 기초 2

순동·2022년 3월 15일

📌 컬럼끼리 계산하기

BMI = 몸무게(kg) / 키(m)^2

✅ 회원들의 BIM 계산하기

SELECT email, height, weight, weight / ((height/100) * (height/100))
FROM copang_main.member;

180cm를 1.8m로 나타내기 위해 키/100를 해주었다.
또한 NULL이 포함된 계산식의 결과는 NULL임을 확인했다.


📌 alias

앞서 계산한 컬럼을 다른 사람이 보았을 때 BMI인지 모를 수도 있다.

alias는 원래의 컬럼 이름을 다른 이름으로 교체해서 보여주는 기능을 한다.
AS 바꿔줄 이름 혹은 (띄어쓰기 1칸) 바꿔줄 이름으로 사용한다.

SELECT
	email,
    height AS,
    weight AS 몸무게,
    weight / ((height/100) * (height/100)) AS BIM
FROM copang_main.member;
SELECT
	email,
    height 키,
    weight 몸무게,
    weight / ((height/100) * (height/100)) BIM
FROM copang_main.member;


📌 CONCAT

CONCAT은 괄호() 안에 있는 것들을 연결하여 하나의 컬럼으로 나타낸다.

SELECT
	email,
    CONCAT(height, 'cm', ', ', weight, 'kg') AS '키와 몸무게', 
    weight / ((height/100) * (height/100)) AS BIM
FROM copang_main.member;


📌 컬럼 값 변환해서 보기

📝 BMI 표

  • 25 ~ : 과체중 또는 비만
  • 18.5 ~ 25 : 정상
  • ~ 18.5 : 저체중

✅ 회원들의 BMI를 보고 비만 여부 판정하기

  • CASE : 사건, 경우
  • WHEN : 조건
  • THEN : 반환할 값
  • ELSE : 지금까지 경우를 제외한 나머지 경우
  • END : CASE문 종료
  • CASEEND에 괄호()를 씌워 AS 컬럼명 지정 가능

💻 문법

CASE
	WHEN 조건 THEN 반환할 값
    .
    .
    .
    ELSE 반환할 값
END
SELECT
	email,
    CONCAT(height, 'cm', ', ', weight, 'kg') AS '키와 몸무게', 
    weight / ((height/100) * (height/100)) AS BIM,
    
(CASE
	WHEN weight IS NULL OR height IS NULL THEN '비만 여부 알 수 없음'
    WHEN weight / ((height/100) * (height/100)) >= 25 THEN '과제충 또는 비만'
    WHEN weight / ((height/100) * (height/100)) >= 18.5
		AND  weight / ((height/100) * (height/100)) < 25 THEN '정상'
	ELSE '저체중'
END) AS obesity_check

FROM copang_main.member
ORDER BY obesity_check ASC;


📝 CASE 함수의 종류

CASE 함수에는 크게 두 종류가 있다. 단순 CASE검색 CASE 함수로 나뉜다.

  1. 단순 CASE 함수
    CASE문 바로 뒤에 컬럼 이름을 쓰고, 그 컬럼의 값과 어떤 값이 같은지(=)를 비교하는 CASE 함수를 의미한다.
CASE 컬럼 이름 
  WHENTHENWHENTHENWHENTHENELSEEND
SELECT email,
CASE age
	WHEN 29 THEN '스물 아홉 살'
    WHEN 30 THEN '서른 살'
    ELSE age
END
FROM copang_nain.member;

ELSE age : 나머지 경우 모두 age 컬럼 값 그대로 출력

  1. 검색 CASE 함수
    사용자가 직접 조건을 설정하여 THEN 뒤의 값을 반환한다.
CASE 
  WHEN 조건1 THENWHEN 조건2 THENWHEN 조건3 THENELSEEND 
SELECT
	email,
    CONCAT(height, 'cm', ', ', weight, 'kg') AS '키와 몸무게', 
    weight / ((height/100) * (height/100)) AS BIM,
    
(CASE
	WHEN weight IS NULL OR height IS NULL THEN '비만 여부 알 수 없음'
    WHEN  weight / ((height/100) * (height/100)) >= 25 THEN '과제충 또는 비만'
    WHEN  weight / ((height/100) * (height/100)) >= 18.5
		AND  weight / ((height/100) * (height/100)) < 25 THEN '정상'
	ELSE '저체중'
END) AS obesity_check

FROM copang_main.member
ORDER BY obesity_check ASC;

📝 NULL을 다른 값으로 변환하는 다양한 함수

  1. COALESCE 함수

✅ NULL 값을 'N/A'로 출력

SELECT COALESCE(height, 'N/A') FROM copang_main.member;

✅ NULL 값을 weight * 2.3으로 계산하고, 둘 다 NULL일 경우 'N/A' 출력

SELECT COALESCE(height, weight * 2.3, 'N/A') FROM copang_main.member;
  1. IFNULL 함수
    height가 NULL이면 'N/A'를 출력하고, NULL이 아니면 컬럼 값 그대로 출력
SELECT IFNULL(height, 'N/A') FROM copang_main.member;
  1. IF 함수
    height가 NULL이 아닌 경우 height 값 그대로 출력, NULL이면 'N/A' 출력
SELECT IF(height IS NOT NULL, height, 'N/A') FROM copang_main.member;
  1. CASE 함수
SELECT
CASE
	WHEN height IS NOT NULL THEN height
    ELSE 'N/A'
END
FROM copang_main.member;

✅ 과제

pizza_price_cost 테이블이 있다.
원가 대비 실제 가격의 비율은 (price/cost)로 나타낼 수 있다.

  1. pizza_price_cost 테이블의 name, price, price/cost(원가 기준 가격의 비율) 컬럼을 조회하세요.

  2. 대신 마지막 price/cost 컬럼을 사용해서 그 값이
    1 =< 값 < 1.5 인 경우, ‘C. 저효율 메뉴’
    1.5 <= 값 < 1.7 인 경우, ‘B. 중효율 메뉴’
    1.7 <= 값 인 경우, ‘A. 고효율 메뉴’
    라고 그 값을 변환해서 표시하는 추가적인 컬럼도 함께 조회하고 대신 이 컬럼에는 efficiency라는 alias를 붙여주세요.

  3. 그리고 전체 row를 efficiency 컬럼을 기준으로 내림차순, 그 다음 기준으로 price 컬럼을 기준으로 오름차순 정렬하세요.

  4. 이 중에서 가장 첫 번째 row 부터 6개만 추리세요.

SELECT name, price, price/cost,
(CASE 
    WHEN price/cost < 1.5 THEN 'C. 저효율 메뉴'
    WHEN price/cost >= 1.5
        AND price/cost < 1.7 THEN 'B. 중효율 메뉴'
    ELSE 'A. 고효율 메뉴'
END) AS efficiency
FROM pizza_price_cost
ORDER BY efficiency DESC, price ASC
LIMIT 6;

0개의 댓글