Mysql 复杂子查询wihtin CASE语句

Mysql 复杂子查询wihtin CASE语句,mysql,sql,subquery,case,correlated-subquery,Mysql,Sql,Subquery,Case,Correlated Subquery,我有一个查询,它根据用户获取的“渠道”、用户的“id商店”和“国家”计算收据的预期值 结果查询包含以下列 计数|标识|门店|国家|价格|美元|渠道| T2S |预期收益|预期收益|预测 (注:ExpectedEvenue=计数*价格×美元*T2S) 在这个查询中,我想知道8月购买并于9月到期的收据的价值(这些产品有试用期,我们根据历史转换率(试用2订阅a.k.a.T2S))计算其价值) 当我们没有某些场景的历史数据时,问题就会出现;要么我们开始通过id_商店、新国家、渠道销售不同的产品,或者前面

我有一个查询,它根据用户获取的“渠道”、用户的“id商店”和“国家”计算收据的预期值

结果查询包含以下列

计数|标识|门店|国家|价格|美元|渠道| T2S |预期收益|预期收益|预测

(注:ExpectedEvenue=计数*价格×美元*T2S)

在这个查询中,我想知道8月购买并于9月到期的收据的价值(这些产品有试用期,我们根据历史转换率(试用2订阅a.k.a.T2S))计算其价值)

当我们没有某些场景的历史数据时,问题就会出现;要么我们开始通过id_商店、新国家、渠道销售不同的产品,或者前面的函数和T2S的任何组合都变成“null”值,列“ExpectedRevenue”因此有“null”值-->这就是为什么我有一个“CASE”函数,每当发生这种情况时,T2S都会取'.28'的值,我只需对列“ExpectedRevenue\u投影”求和即可得到最终结果结果

然而,这个'.28'只是一个固定值,根本不准确(我们的产品从10美元到120美元……)

这就是为什么我要求亲爱的stackoverflow贡献者将这个“28%”替换为另一个T2S,在这种情况下,T2S将根据历史上的“国家”和“价格/美元”区间计算,如(0-15),(15.01-29.99),(30-49.99)。。。等等

(设置区间的原因是“价格单位美元”是根据创建时的汇率计算的,因此客户以外币购买的同一产品可能为49.99、49.98、49.97…如果没有历史数据,T2S将为“空”)

多谢各位

SELECT
r.count AS count,
r.id_store AS id_store,
r.country AS country,
r.price_usd AS price_usd,
r.channel AS channel,

a.count / (a.count + u.count) AS T2S,    
r.count * r.price_usd * (a.count / (a.count + u.count)) AS ExpectedRevenue,


CASE WHEN (a.count / (a.count + u.count)) is null then (r.count * r.price_usd * .28) else r.count * r.price_usd * (a.count / (a.count + u.count)) END AS ExpectedRevenue_projections



FROM
(
select count(distinct(r.user_id)) AS count, p.id_store, u.country, r.price_usd, channel
from receipts as r 
    inner join products as p on p.id=r.product_id 
    inner join customers as c on r.customer_id=c.id 
    inner join users as u on u.id=r.user_id
where 
    MONTH(DATE_ADD(DATE_ADD(r.original_subscription_at, INTERVAL p.trial_days DAY), INTERVAL p.trial_months MONTH)) = 9
    and YEAR(original_subscription_at) = 2017
    and MONTH(original_subscription_at) = 8
    and YEAR(r.expiration_at) = 2017
    and MONTH(r.expiration_at) = 9


    and r.status='trial'
    and p.platform not in ('manual')
    and c.tester=0
group by 2,3,4,5
) AS r

LEFT JOIN
(
select count(distinct r.user_id) AS count, u.country, p.id_store, channel
from receipts as r 
    inner join products as p on p.id=r.product_id
    inner join users as u on u.id=r.user_id
where year(r.created_at)=2017
    AND r.status = 'active'
group by 2,3,4
) AS a

ON r.country = a.country AND r.id_store = a.id_store AND r.channel = a.channel

LEFT JOIN
(
select count(distinct r.user_id) AS count, u.country, p.id_store, channel
from receipts as r 
    inner join products as p on p.id=r.product_id
    inner join users as u on u.id=r.user_id
where year(r.created_at)=2017
    AND r.status = 'unpaid'
group by 2,3,4
) AS u
ON r.country = u.country AND r.id_store = u.id_store AND r.channel = u.channel