sql에서는 = 등호가 비교연산자로 사용됩니다.
대신 := 이렇게 콜론(:)과 등호(=)를 같이 쓰면 대입연산자로 쓸 수 있어요.
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 형태로 증감율을 구했는데
데이터를 가오는 속도는 :=
이 연산자가 훨씬 빠른것 같습니다.
다음엔 self-join 으로 증감율을 구하는 법도 한 번 올려볼께요.
#티엘엑스 #TLX #개발 #개발팀 #개발자 #꿀팁 #인사이트 #조언