본문 바로가기

카테고리 없음

SQL 증감율 구하는 법

728x90

https://sgwanlee.medium.com/sql-로-간단히-증감율-데이터를-얻는-방법-4190290771b9

 

[SQL 데이터분석] 증감율 구하는 간단한 방법

sql에서는 = 등호가 비교연산자로 사용됩니다. 대신 := 이렇게 콜론(:)과 등호(=)를 같이 쓰면 대입연산자로 쓸 수 있어요.

sgwanlee.medium.com

 

select
@prev := users.id
// @prev 라는 임시변수에 users.id 값을 넣어라.
from users

 

가입일자로 사용자수를 구해보면, 아래처럼 가입일로 group_by 를 해서 구하죠.

select
    date(created_at)  as '가입일'
    , count(1)        as '가입자수'
from users
group by 1
order by 1 desc;//    가입일     |    가입자수
// ---------------------------
//  2017-08-02        100
//  2017-08-01         50

그럼 전일 대비 증감율을 구하려면 어떻게 할까요?

select
    date(created_at)  as '가입일'
    , @prev           as '전일 가입자수'
    , (count(1) - @prev) / @prev as '증감율'
    , @prev := count(1) as '가입자수'
from users
group by 1
order by 1 desc;//    가입일     |    전일 가입자수  |   증감율    |    가입자수
// --------------------------------------------------------
//  2017-08-02         50            1.0           100
//  2017-08-01         50            0             50

증감율을 계산하는 count(1) / @prev까지는 @prev 에 전일 가입자수가 저장되어 있구요.

@prev := count(1) 에서 당일 가입자수로 할당이 됩니다.

저는 := 이 연산자를 알기 전엔 self-join 형태로 증감율을 구했는데