【发布时间】:2020-07-09 02:07:36
【问题描述】:
我有一个表 order_buyer_id 作为交易的 id,createdby 作为买家的 id,createdAt 作为交易发生的日期,数量作为每笔交易的重量。
在我的桌子上,我将买家分为 3 类:
- new buyer
- unique buyer
- existing buyer
这是找出新买家的语法,我称之为 A(新买家):
select
count(distinct om.createdby) as count_buyer
from (select count(xx.count_) as count_
from (select count(createdby) as count_ from order_match
where order_status_Id in (4, 5, 6, 8)
group by createdby
having count(createdby) = 1) xx
) x1,
(select createdby
from order_match
group by createdby
having count(createdby) = 1) yy,
order_match om
where yy.createdby = om.createdby and
order_status_id in (4, 5, 6, 8)
and om.createdAt >= paramdatefrom
and om.createdAt <= paramdateto
and NOT EXISTS (select 1 from order_match om2
where om.createdby = om2.createdby
and order_status_id in (4, 5, 6, 8)
and om2.createdAt < paramdatefrom);
这是找出重复买家的语法,称为 B(唯一买家):
select
count(distinct om.createdby) as count
from (select count(xx.count_) as count_
from (select count(createdby) as count_ from order_match
where order_status_Id in (4, 5, 6, 8)
group by createdby
) xx
) x1,
(select createdby
from order_match
group by createdby
) yy,
order_match om
where yy.createdby = om.createdby and
order_status_id in (4, 5, 6, 8)
and om.createdAt >= paramdatefrom
and om.createdAt <= paramdateto;
;
这是找出现有买家的语法,称为 C(现有买家):
select
count(distinct om.createdby) as count
from
order_match om
where om.order_status_id in (4,5,6,8)
and om.createdAt <= paramdateto
and om.createdAt >= paramdatefrom
and EXISTS (select 1 from order_match om2
where om.createdby = om2.createdby
and om2.createdAt < paramdatefrom and
om2.order_status_id in (4, 5, 6, 8))
;
基本上我希望所有这些语法都变成变量 A、B、C,所以我可以根据我的解释计算我需要的百分比,预期结果就像这样
select (A (the result of syntax new Buyer) : B (the result of syntax unique buyer)) * 100 as percentage_1
和select (100 - percentage_1) as percentage_2
重点是如何让语法的每个结果变成可变的,这样我就可以像预期的结果一样计算百分比_1 和百分比_2。
【问题讨论】:
标签: mysql stored-procedures mysql-workbench mysql-variables