[SQL] 확률 통계 기능
21103 단어 SQL
MySQL 언어 실행 순서
from
on
join
where
group by ( sum() )
having
select
distinct
union
order by
거듭
1.1 기초 누적
주문서 만 들 기
create table SC (id varchar(10),dt datetime(10),orderamt decimal(18,1));
insert into SC values('01' , '2018-01-01' , 2);
insert into SC values('02' , '2018-01-02' , 3);
insert into SC values('03' , '2018-01-03' , 5);
insert into SC values('04' , '2018-01-04' , 10);
select * from SC;
Output:
id
dt
orderamt
01
2018-01-01
2
02
2018-01-02
3
03
2018-01-03
5
04
2018-01-04
10
누적 알고리즘
• 부 등 값 으로 연결 하기 • 실행 순서: 먼저 join on, 그 다음 group by, sum
select a.id, a.dt, a.orderamt, sum(b.orderamt) as cum
from SC a
join SC b
on a.dt >= b.dt
group by a.id, a.dt, a.orderamt;
Output:
id
dt
orderamt
cum
01
2018-01-01
2
2
02
2018-01-02
3
5
03
2018-01-03
5
10
04
2018-01-04
10
20
1.2 조 누적
주문서 만 들 기
create table SC (id varchar(10),dt datetime(10),orderamt decimal(18,1));
insert into SC values('01' , '2018-01-01' , 2);
insert into SC values('02' , '2018-01-02' , 7);
insert into SC values('03' , '2018-02-03' , 5);
insert into SC values('04' , '2018-02-04' , 10);
select * from SC;
Output:
id
dt
orderamt
01
2018-01-01
2
02
2018-01-02
7
03
2018-02-03
5
04
2018-02-04
10
누적 알고리즘: 월 별로 그룹 을 나 누 어 누적 합 니 다.
• 부 등 값 으로 연결 하기 • 실행 순서: 먼저 join on, 그 다음 group by, sum
방법 1: 가장 간단 한 MySQL 문법 으로 쓰기
select a.id, a.dt, a.orderamt, sum(b.orderamt) as cum
from SC a
join SC b
on a.dt >= b.dt and substr(a.dt, 1, 7) = substr(b.dt, 1, 7)
group by a.id, a.dt, a.orderamt;
-- :substr(string, start, length)
방법 2: 창 함수: 한 마디 로 해결!!
select *,
sum(orderamt) over (partition by substr(dt, 1, 7) order by dt) as cum
from SC;
-- : ,partition by ,order ,sum
Output:
id
dt
orderamt
cum
01
2018-01-01
2
2
02
2018-01-02
7
9
03
2018-01-03
5
5
04
2018-01-04
10
15
1.3 누적 확률
계산 사고: • 첫 번 째 단계: 한 달 에 sumtotalk 의 표 • 2 단계: 1.2 로 얻 은 월 별 누적 / 월 별 sumtotal 의 시계, 누적 확률% 획득
방법 1: 가장 간단 한 MySQL 문법 으로 쓰기
select aa.id, aa.dt, bb.mon, aa.orderamt, aa.cum, bb.total,
(round(cum * 100.00 / total ,2) || '%' ) as cum_pct
from (
(select a.id, a.dt, a.orderamt, substr(a.dt, 1, 7) as mon,sum(b.orderamt) as cum
from SC a
join SC b
on a.dt >= b.dt and substr(a.dt, 1, 7) = substr(b.dt, 1, 7)
group by a.id, a.dt, a.orderamt) aa -- Step1.
left join --Step3. aa /bb %
(select dt, substr(dt, 1, 7) as mon, sum(orderamt) as total
from SC
group by mon) bb -- Step2. sum_total
on aa.mon = bb.mon
);
방법 2: 창 함수 partition by 로 쓰기
select aa.id, aa.dt, aa.mon, aa.orderamt, aa.cum, bb.total,
(round(cum * 100.00 / total ,2) || '%' ) as cum_pct from
(
(select *, substr(dt, 1, 7) as mon,
sum(orderamt) over (partition by substr(dt, 1, 7) order by dt) as cum
from SC) aa -- Step1.
left join --Step3. aa /bb %
(select substr(dt, 1, 7) as mon, sum(orderamt) as total
from SC
group by mon) bb -- Step2. sum_total
on aa.mon = bb.mon
);
Output:
id
dt
mon
orderamt
cum
total
cum_pct
01
2018-01-01
2018-01
2
2
9
22.22%
02
2018-01-02
2018-01
7
9
9
100.0%
03
2018-02-01
2018-02
5
5
15
33.33%
04
2018-02-02
2018-02
10
15
15
100.0%
2. 전년 동기 대비
3. 일 일, 유 존 률 을 계산한다.
참고 문헌 [1] 초 형의 잡화점https://cloud.tencent.com/developer/article/1587654
[2] 동기 대비, 전 월 대비 계산https://cloud.tencent.com/developer/article/1587652
[3] 통계 일 일 · 유치https://cloud.tencent.com/developer/article/1587655
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.