как преобразовать результаты синтаксиса в переменную mysql - PullRequest
0 голосов
/ 28 марта 2020

У меня есть таблица с order_buyer_id в качестве идентификатора транзакции, созданная в качестве идентификатора покупателя, созданная в качестве даты совершения транзакции, а количество в качестве веса каждой транзакции.

в моей таблице i классифицировал покупателя как 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 точно так же, как ожидаемые результаты.

1 Ответ

1 голос
/ 28 марта 2020

Чтобы проверить большие запросы, вы должны предоставить некоторые данные, чтобы правильно проверить запрос см.

И я не смог найти в вашем описании, почему вам нужен результат_ c, но теперь вы можете использовать его.

, кстати, это алгоритмы или запросы, а не синтаксис . .

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...