【问题标题】:how to transform results of syntax to become variable mysql如何将语法结果转换为变量mysql
【发布时间】: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


    【解决方案1】:

    要测试更大的查询,您必须提供一些数据,才能正确测试查询see

    我在你的描述中找不到为什么你需要 result_c,但你现在可以使用它了。

    顺便说一下,这是算法或查询,而不是 syntax.

    SELECT 
        result_a / result_b * 100 AS percentage_1,
        100 - (result_a / result_b * 100) AS percentage_2
    FROM
        (SELECT 
            (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)) result_a,
                (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) result_b,
                (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))) result_c
        ) a
    

    【讨论】:

    • 你是最好的先生,是的,我刚刚意识到我根本不需要 result_c,谢谢,你能给我一些建议如何插入 result_a 和 result_b 出现吗?
    • 所以不仅出现了precentage_1和precentage_1
    猜你喜欢
    • 2014-06-27
    • 2010-10-22
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多