새소식

mySQL

[MySQL] 정복하기 | 데이터 필터링, 구매금액 구하기, 구매건수 구하기

  • -

내가 원하는 걸 알려주는 블로그나 영상이 없어서

직접 ChatGPT에게 물어보면서 공부한 포스팅
일을 하면서 필요한 데이터들을 MySQL로 쫌쫌따리 구해보며
기억하기 위해 티스토리에 글을 올려본다!


일단 내가 사용하는 테이블명은 `orderlist230524`이다.
사실 이제 와서 왜 저렇게 길게 썼는지 싶어 지금은 테이블명을 수정했음 ㅋㅋㅋ
 
우리 회사 반려동물 업체며 `collection`컬럼은 강아지/고양이로 나뉘어져 있는데,
나는 이 중 강아지 데이터만 보고 싶었다 
그래서, collection 컬럼에 강아지를 포함한 데이터 필터링하기로 했음
 

SELECT *
FROM `orderlist230524`
WHERE collection LIKE '강아지%';

여기서 내가 몰랐던 함수들

LIKE : 특정 문자를 포함할 때 씀

강아지% : 강아지로 시작하는 경우
%강아지 : 강아지로 끝나는 경우
%강아지% : 강아지 앞뒤에 강아지가 들어가는 경우 전체

그러면 결과값으로 임의로 설정한 total_price 컬럼과 밑에 강아지 품목의 총 구매금액이 추출된다.

 


해당 날짜의 '총 구매 금액'과 '구매건수' 확인하기

해당 스키마(DB)의 날짜는 5월 24일 ~ 5월 30일까지의 데이터였다.

그래서 나는 총 7일의 기간 중 5월 25일의 총 구매 금액과 구매 건수를 알고 싶었다.

 

가짜 결과값

SELECT 
  SUM(price) AS total_sales,
  COUNT(*) AS total_orders
FROM 
  `orderlist230524`
WHERE 
  DATE(order_date) = '2023-05-25';
%3C/p|CDM|1.3|{"originWidth":0,"originHeight":0,"style":"alignCenter"}_##]

그럼 이 필터링된 데이터들의 총 '구매금액'은?

그럼 강아지 품목의 총 구매금액은 얼마나 될까? 가 궁금해졌다

 

SELECT SUM(price) AS total_price
FROM `orderlist230524`
WHERE collection LIKE '강아지%';

SELECT : 보여준다 (조회의 의미)

SUM : 합친다 (엑셀이랑 똑같아서 반가웠음)

AS total_price : SUM(price) 합쳐진 price를 이제부터 total_price 라고 부르겠다(AS).

FROM `orderlist230524` : `orderlist230524 에서 데이터를 가져와서(FROM).

 

그러면 결과값으로 임의로 설정한 total_price 컬럼과 밑에 강아지 품목의 총 구매금액이 추출된다.

 

 


 

해당 날짜의 '총 구매 금액'과 '구매건수' 확인하기

해당 스키마(DB)의 날짜는 5월 24일 ~ 5월 30일까지의 데이터였다.

그래서 나는 총 7일의 기간 중 5월 25일의 총 구매 금액과 구매 건수를 알고 싶었다.

 

 

가짜 결과값

 

SELECT 
  SUM(price) AS total_sales,
  COUNT(*) AS total_orders
FROM 
  `orderlist230524`
WHERE 
  DATE(order_date) = '2023-05-25';

이게 아닌데,,? 헷갈리는 것이 있다

COUNT(*) AS total_orders FROM `orderlist230524` 에서 
COUNT(*) 이 SELECT절 안에 price 컬럼이 존재해서 그 값을 COUNT하는 것인지 헷갈렸다

 

그래서 ChatGPT한테 물어봤는데 넘 바보같은 질문이었음

대놓고 WHERE 절에 order_date 가 있는데,, COUNT주어진 '조건'에 해당하는 행의 수를 세는 함수인데..

 

쉽게 말해서 이 쿼리는

order_date(주문날짜) 가 2023-05-25라는 조건(where절)에 충족하는

SUM(price) 와 COUNT(*) 의 함수를 실행하는 것이다..!

SUM(price) -> `2023-05-25` 의 구매금액을 합친다

COUNT(*) ->`2023-05-25`의 수를 합친다

[##_Image/>

Array

나는 굉장히 기초적인 것을 몰랐던 것이고, 사실 여기서 좀 더 생각해봐야 할 것이 생겼다.
당연히 5월 25일의 주문날짜가 로우데이터에서 762개가 찍혔으면 구매건은 총 762건이 맞지만
한번에 2-3개를 구매한 사람 또한 날짜로 필터링을 해 1개로 카운트될 것이다.
 
그렇기 때문에 COUNT함수는 order_date를 조건으로 세우는 것이 아닌 구매수량 (quantity)로 구해야 함..!
 

찐 결과값

SELECT 
  SUM(price) AS total_sales,
  COUNT(quantity) AS total_quantity
FROM 
  `orderlist230524`
WHERE 
  DATE(order_date) = '2023-05-25';

하는 것은 굉장히 쉬웠당 그냥 COUNT함수에 quantity 컬럼값을 넣어주면 끝임 ㅎㅋ


그렇다면,, 일정 기간동안 해당 텍스트가 포함된 컬럼의 총 구매금액은??

이게 뭐냐면 예를 들어서..
5월 24일부터 5월 29일까지
상품 콜렉션 중 '강아지'에 해당하는 주문건
총 구매금액을 구해보자는 거다.
 

SELECT SUM(purchase_amount) AS total_purchase_amount
FROM orderlist
WHERE order_date BETWEEN '2023-05-24' AND '2023-05-29'
AND collection LIKE '%A%';

넘 신기한 것은 내 테이블엔 purchase_amount 컬럼이 없는데 저렇게 적으니까 알아서 합산 되더라..
그래도 깔끔하고 우아하려면 있는 컬럼을 사용한 SUM(price)가 좋겠지.

 


이렇게 MySQL 을 시작해보았다.
사실 본격적으로 시작하기 전에 데이터를 import 하는 것조차 굉장히 힘들었다..
UTF-8로 인코딩해도 안돼
엑셀에 들어가서 열 텍스트를 영어로 바꿔도 안돼 아오..
 
다음에는 정말 정말 정말 쉽게 데이터를 import 하는 방법을 올려야겠다!
 
뾰옹

Contents

포스팅 주소를 복사했어요 깨굴!

도움이 되셨다면 공감 부탁드려요 깨굴!