본문 바로가기
내일배움캠프/SQL

SQL-실습

by useSword 2024. 1. 13.

데이터베이스에서 SQL을 사용하여 지역명을 포함한 음식점 이름 표시하기

실습을 통해, 서울시에 위치한 음식점의 이름 앞에 지역명을 추가하는 방법을 배웠습니다. 이를 위해 CONCAT 함수와 SUBSTRING 함수를 사용했는데, CONCAT은 여러 문자열을 하나로 결합하고, SUBSTRING은 문자열의 특정 부분을 추출하는 데 사용됩니다.

아래의 SQL 쿼리는 주소가 서울인 모든 음식점을 찾아, 각 음식점 이름 앞에 '[서울]'이라는 텍스트를 추가합니다

 

SELECT 
  restaurant_name AS '식당',
  addr AS "원래주소",
  CONCAT('[', SUBSTRING(addr, 1, 2), '] ', restaurant_name) AS "수정된 음식점명"
FROM food_orders 
WHERE addr LIKE '%서울%';

 

 

 

SQL에서 서울 지역별 음식 유형에 따른 평균 주문 금액을 계산하기

 

SQL 실습을 통해, 서울 지역에 있는 음식점의 음식 유형별로 평균 주문 금액을 계산하는 방법에 대해 배웠습니다. 이 작업은 GROUP BY 절을 사용하여 각 지역과 음식 유형의 조합에 대한 평균 값을 구하는 과정을 포함합니다.

 

SELECT 
  SUBSTR(addr, 1, 2) AS "지역",
  cuisine_type,
  AVG(price) AS "평균금액"
FROM food_orders
WHERE addr LIKE '%서울%'
GROUP BY 1, 2;

 

 

 

이메일 도메인별로 고객 수와 평균 연령을 분석하기


실습에서는 이메일 도메인별로 고객의 수와 평균 연령을 구하는 방법에 대해 배웠습니다. 이 데이터 분석은 고객 기반의 다양성과 연령대를 이해하는 데 도움이 될 수 있습니다. 특히, 마케팅 전략을 수립하거나 타겟 고객층을 파악하는 데 유용합니다.

 

SELECT 
  SUBSTRING(email, 10) AS '도메인',
  COUNT(1) AS "고객수",
  AVG(age) AS '평균 나이'
FROM customers
GROUP BY 1;

 

SUBSTRING(email, 10)은 이메일 주소의 10번째 문자부터 시작하는 부분 (대부분 이메일 도메인이 위치하는 부분)을 추출합니다. 그런 다음 GROUP BY 1 절을 사용하여 이 도메인별로 결과를 그룹화하고, 각 그룹에 대해 COUNT(1)과 AVG(age)로 각각 고객 수와 평균 연령을 계산합니다.

 

 

 

SQL을 이용해 음식점의 지역, 이름, 음식 유형 정보를 결합하고 주문 건수를 계산하기

SQL 실습에서는 특정 포맷으로 음식점 정보를 결합하고, 해당 포맷으로 그룹화하여 각 그룹의 총 주문 건수를 계산하는 방법을 배웠습니다. 이런 식의 데이터 처리는 특히 매장 관리, 마케팅 분석, 고객 행동 분석 등에서 유용합니다.

아래 SQL 쿼리는 음식점의 지역, 이름, 음식 유형을 결합하여 새로운 컬럼을 만들고, 각 그룹의 총 주문 건수를 계산합니다

 

SELECT 
  CONCAT('[', SUBSTRING(addr, 1, 2), ']', restaurant_name, ' (', cuisine_type, ')') AS "음식점",
  COUNT(1) AS '주문건수'
FROM food_orders
GROUP BY 1;

 

 

SQL의 IF와 CASE 문을 사용하여 데이터에 조건부 로직 적용하기

SQL에서 데이터를 다룰 때, 특정 조건에 따라 다른 결과를 얻고 싶을 때 IF문과 CASE문을 활용할 수 있습니다.

 

IF 문
IF 문은 주어진 조건이 참(True)일 때와 거짓(False)일 때 각각 다른 값을 반환합니다. 사용 형태는 IF(조건, 참일 때 값, 거짓일 때 값) 입니다. 예를 들어, 어떤 숫자가 10보다 큰지 아닌지에 따라 다른 텍스트를 반환하고 싶다면 다음과 같이 사용할 수 있습니다

 

SELECT IF(number > 10, 'Greater than 10', '10 or Less') FROM table;

 

 

CASE 문
CASE 문은 여러 조건을 순차적으로 검사하고, 각 조건에 해당하는 값을 반환합니다. 사용 형태는 CASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 ELSE 기본값 END입니다. 예를 들어, 점수에 따라 등급을 매기고 싶을 때 다음과 같이 사용할 수 있습니다

 

SELECT CASE WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    ELSE 'D' END AS grade
FROM scores;

 

 

SQL을 사용하여 연령대와 성별에 따른 사용자 세분화

오늘의 SQL 실습을 통해, 특정 연령대(10세 이상 30세 미만)의 고객을 성별에 따라 세분화하고 그룹화하는 방법을 배웠습니다. 

 

SELECT 
  CASE 
    WHEN age BETWEEN 10 AND 19 AND gender = 'male' THEN '10대 남성'
    WHEN age BETWEEN 10 AND 19 AND gender = 'female' THEN '10대 여성'
    WHEN age BETWEEN 20 AND 29 AND gender = 'male' THEN '20대 남성'
    WHEN age BETWEEN 20 AND 29 AND gender = 'female' THEN '20대 여성'
  END AS "고객분류",
  name,
  age,
  gender
FROM customers
WHERE age BETWEEN 10 AND 29;

 

 

SQL을 이용해 조건에 따라 다른 배달 수수료와 할증료를 계산하기

오늘의 SQL 실습을 통해 배달 서비스에서 지역과 배달 시간, 주문 시기에 따라 다르게 적용되는 배달 수수료와 할증료를 계산하는 방법을 배웠습니다.

 

SELECT 
  CASE 
    WHEN delivery_time >= 30 THEN price * 0.1 * IF(addr LIKE "%서울%", 1.1, 1)
    WHEN delivery_time >= 25 THEN price * 0.05 * IF(addr LIKE "%서울%", 1.1, 1)
    WHEN delivery_time < 25 THEN 0
  END AS "배달수수료",
  order_id,
  restaurant_name,
  price,
  delivery_time,
  addr
FROM food_orders;

 

 

배달 할증료 계산하기
주말과 평일에 따라 다른 할증료를 적용합니다. 주말에는 3000원, 평일에는 3500원의 할증료를 부과합니다. 서울 지역의 경우 추가로 10%의 할증료를 적용합니다.

 

 

SELECT 
  CASE 
    WHEN day_of_the_week = 'weekday' THEN 3500 * IF(addr LIKE "%서울%", 1.1, 1)
    WHEN day_of_the_week = 'weekend' THEN 3000 * IF(addr LIKE "%서울%", 1.1, 1)
  END AS "배달할증료",
  order_id,
  restaurant_name,
  price,
  delivery_time,
  addr
FROM food_orders;

 

 

여러가지 실습을 통해 오늘의 내용들을 정리하고 이해하는데에 큰 도움이 되었습니다.