TIL 240109

hyeo71·2024년 1월 9일
0

2024 내배캠 AI 트랙

목록 보기
2/108

오늘 한 일

  • SQL 2주차 강의
  • SQL 3주차 강의
  • SQL 문제 9개(2~10)

SQL 2주차

엑셀 함수 사용하기

SQL 에서 연산 기호를 사용할 수 있다.

연산자의미
+더하기
-빼기
*곱하기
/나누기
%나머지

엑셀 함수는 엑셀에서 범위를 지정하여 함수를 사용한다면 SQL은 컬럼을 기준으로 함수가 사용된다.

함수의미
SUM(컬럼)합계
AVG(컬럼)평균
COUNT(컬럼)갯수
MIN(컬럼)최솟값
MAX(컬럼)최댓값

COUNT(컬럼)은 COUNT(1), COUNT(*)로 사용할 수 있다.
COUNT 함수는 DISTINCT와 함께 사용할 수 있다.
DISTINCT는 중복된 값을 1개로 취급하는 것으로 COUNT와 함께 사용하여 중복을 제거한 값의 갯수를 구할 수 있다.


범주별 연산(GROUP BY)

데이터를 기준에 맞춰 그룹으로 묶어서 데이터를 처리하는 것이다.
카테고리라 이해하면 될 듯

GROUP BY 행에 있는 컬럼은 SELECT 문에도 있어야 한다.
GROUP BY에 컬럼명이 아닌 SELECT의 컬럼의 위치(숫자)를 써도 된다.

SELECT 컬럼1
FROM 테이블
GROUP BY 컬럼1

SELECT 컬럼1, 컬럼2
FROM 테이블
GROUP BY 1


정렬하기(ORDER BY)

데이터를 기준에 맞춰 오름차순, 내림차순으로 정렬한다.

종류구문
오름차순ASC(기본값), 생략가능
내림차순DESC

SELECT 컬럼
FROM 테이블
GROUP BY 컬럼
ORDER BY 컬럼 아무거나


2주차 끝&숙제

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로(내림차순) 정렬하기

SELECT : 음식 종류(GROUP BY를 써야함), 가장 높은 금액, 가장 낮은 금액
FROM : food_orders
GROUP BY : 음식 종류별
ORDER BY : 가장 낮은 주문금액 순서

SELECT cuisine_type,
MIN(price) as min_price,
MAX(price) as max_price
FROM food_orders
GROUP BY cuisine_type 
ORDER BY min_price DESC 

SQL 3주차

데이터 가공하기

REPLACE

특정 문자를 다른 문자로 바꾸는 것

REPLACE(컬럼, 현재 값, 바꿀 값)

SUBSTR(SUBSTRING)

컬럼의 데이터에서 필요한 부분만 가져올 때 사용

SUBSTR(컬럼, 시작 위치, 글자 수)

시작 위치는 1부터 시작
글자 수는 시작 위치로부터 필요한 글자 수, 시작 위치부터 마지막 문자까지 필요하다면 생략

CONCAT

여러 컬럼에서 데이터를 가져와 하나로 만드는 것

CONCAT(값1, 값2, 값3, ....)

값으로는 컬럼 외에도 한글, 영어, 숫자, 특수문자를 사용할 수 있다.(' ' 사용!!!)


WHERE 외의 조건을 사용할 때

IF

조건에 참일 경우와 거짓일 경우에 적용할 방법을 지정할 수 있다.

IF(조건, 조건이 참일 때, 조건이 거짓일 때)

CASE

조건을 여러개 지정해야 할 때, 여러번의 IF 문을 적용한 효과를 가짐

CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END


데이터 타입 문제 해결하기

숫자인 줄 알고 SUM, AVG 등 함수를 사용했지만 'data type' 오류가 생기는 경우가 있다. 이는 해당 컬럼을 문자형 데이터로 정의하고 사용중이기 때문이다. CAST 함수를 사용해 원하는 데이터 타입으로 변환할 수 있다.

CAST('데이터' AS 데이터 타입)


3주차 끝&숙제

다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
-주중 : 25분 이상
-주말 : 30분 이상

SELECT : 주문 번호, 가게이름, 주문한 요일, 배달시간, 지연여부 (결과 스크린샷)
FROM : food_orders

CASE
주문한 요일이 주중이고 배달시간이 25분 이상 이거나 주문한 요일이 주말이고 배달시간이 30분 이상일 때 LATE 그 외에는 On-time

SELECT order_id,
restaurant_name,
day_of_the_week,
delivery_time,
CASE 
	when (day_of_the_week='Weekday' and delivery_time>=25) or (day_of_the_week='Weekend' and delivery_time>=30) then 'Late'
	else 'On-time'
END '지연여부'
FROM food_orders fo 

SQL 문제(2~10)

0개의 댓글