powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
5 сообщений из 5, страница 1 из 1
Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
    #39849580
bumerang37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы хотел использовать внешний запрос, но не знаю как именно. Пробовал SELECT * ( исходный запрос), запутался немного. Нужно посчитать ci.id для каждого клиента. Каким образом добавить поле count_orders для клиента, если использовать union либо внешний select ? Индикатором нового заказа клиента является добавление нового client invoice (в ci находится foreign key на client_id). Буду очень признателен за оперативную помощь
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
(select c.id,
        c.first_name                                                                       AS 'Имя',
        c.middle_name                                                                      as 'Отчество',
        c.last_name                                                                        as 'Фамилия',
        c.phone,
        c.email,
        us.name                                                                            as 'utm_source',
        docs.total                                                                         as total,
        docs.registration_date                                                             AS date_paid,
        1                                                                                  as paid,
        REPLACE(REGEXP_SUBSTR(additional_data, 'invoiceId":"([^"]+)'), 'invoiceId":"', '') as OrderId
 from client c
          left join utm_source us on utm_source_id = us.id
          left join (SELECT *
                     FROM ((SELECT document.responsible_id      as drid,
                                   client.responsible_id        as crid,
                                   document.template_id         as dtid,
                                   `document`.`id`,
                                   client.id                    as cid,
                                   `document`.`publish`,
                                   `document_item`.`to_subcount_1_id`,
                                   `document_item`.`to_subcount_1_object`,
                                   `document_item`.`template_id`,
                                   `document_item`.`total`,
                                   IFNULL(`document`.`registration_date`,
                                          `document`.`created`) as registration_date,
                                   document_item.total          as total_sum,
                                   CONCAT(client.last_name, ' ', client.first_name, ' ',
                                          client.middle_name)   as client_name
                            FROM `document_item`
                                     LEFT JOIN `document` ON `document_item`.`document_id` = `document`.`id`
                                     INNER JOIN `client` ON client.id = document_item.to_subcount_1_object
                            WHERE (`document_item`.`deleted` = 0)
                              -- AND (`client`.`utm_source_id` = 4)
                              AND (`document_item`.`deleted` = 0)
                              AND (`document`.`deleted` = 0)

                              AND (`client`.`publish` = 1)
                              AND (`client`.`deleted` = 0)
                              AND ((`document`.`publish` = 1) AND
                                   (IFNULL(`document`.`registration_date`,
                                           `document`.`created`) >= '2019-06-18' AND
                                    `document`.`created` < '2019-07-30'))
                            ORDER BY `document_item`.`to_subcount_1_object`)
                           UNION
                           (SELECT document.responsible_id      as drid,
                                   client.responsible_id        as crid,
                                   document.template_id         as dtid,
                                   `document`.`id`,
                                   client.id                    as cid,
                                   `document`.`publish`,
                                   `document`.`to_subcount_1_id`,
                                   `document`.`to_subcount_1_object`,
                                   `document`.`template_id`,
                                   `document`.`total`,
                                   IFNULL(`document`.`registration_date`,
                                          `document`.`created`) as registration_date,
                                   document.total               as total_sum,
                                   CONCAT(client.last_name, ' ', client.first_name, ' ',
                                          client.middle_name)   as client_name
                            FROM `document`
                                     INNER JOIN `client` ON client.id = document.to_subcount_1_object
                            WHERE (`document`.`deleted` = 0)
                              AND (`document`.`deleted` = 0)
                              AND (`client`.`publish` = 1)
                              AND (`client`.`deleted` = 0)
                              AND (`document`.`to_subcount_1_id` = 5)
                              AND ((`document`.`publish` = 1) AND
                                   (IFNULL(`document`.`registration_date`,
                                           `document`.`created`) >= '2019-06-18' AND
                                    `document`.`created` < '2019-07-30'))
                            ORDER BY `document`.`to_subcount_1_object`)
                           ORDER BY client_name) unlim) docs ON docs.cid = c.id
 where `total` IS NOT NULL
 HAVING OrderId IS NOT NULL)

UNION ALL

(select c.id,
        c.first_name              AS 'Имя',
        c.middle_name             as 'Отчество',
        c.last_name               as 'Фамилия',
        c.phone,
        c.email,
        us.name                   as 'utm_source',
        ci.amount                 as total,
        ci.paid_date              AS date_paid,
        ci.paid                   as paid,

        ci.outside_invoice_number as OrderId
 from client c
          left join utm_source us on utm_source_id = us.id
          left join client_invoice ci on ci.client_id = c.id
     AND ((ci.created >= '2019-06-18' AND c.created < '2019-07-30') OR ci.created IS NULL)
 HAVING OrderId IS NOT NULL
)
...
Рейтинг: 0 / 0
Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
    #39849590
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
WITH cte AS (текст запроса)
SELECT *, COUNT(/*DISTINCT*/ id) OVER (PARTITION BY id) cnt
FROM cte
...
Рейтинг: 0 / 0
Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
    #39849617
bumerang37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Window Functions к сожалению не поддерживаются в моей версии MariaDB 10.1
...
Рейтинг: 0 / 0
Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
    #39849691
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну посчитайте во втором CTE, какие проблемы?
...
Рейтинг: 0 / 0
Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
    #39850148
bumerang37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал следующим образом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
SELECT *
FROM (
         (select c.id,
                 c.first_name                                                                       AS 'Имя',
                 c.middle_name                                                                      as 'Отчество',
                 c.last_name                                                                        as 'Фамилия',
                 c.phone,
                 c.email,
                 us.name                                                                            as 'utm_source',
                 dcms.total                                                                         as total,
                 dcms.registration_date                                                             AS date_paid,
                 1                                                                                  as paid,
                 REPLACE(REGEXP_SUBSTR(additional_data, 'invoiceId":"([^"]+)'), 'invoiceId":"', '') as OrderId,
                 orders.sum                                                                         as count_orders,
                 CASE
                     WHEN orders.sum > 0 AND orders.sum < 4 THEN 10
                     WHEN orders.sum > 3 AND orders.sum < 7 THEN 13
                     WHEN orders.sum > 6 AND orders.sum < 10  THEN 15
                     WHEN orders.sum > 9 THEN 17
                     END as tarif,
                 orders.sum * (CASE
                                   WHEN orders.sum > 0 AND orders.sum < 4 THEN 10
                                   WHEN orders.sum > 3 AND orders.sum < 7 THEN 13
                                   WHEN orders.sum > 6 AND orders.sum < 10  THEN 15
                                   WHEN orders.sum > 9 THEN 17
                     END) as reward
          from client c
                   left join utm_source us on utm_source_id = us.id
                   INNER JOIN (SELECT client_id, count(id) as sum
                               FROM cli_en
                               group by client_id) orders ON orders.client_id = c.id
                   left join (SELECT *
                              FROM ((SELECT document.responsible_id      as drid,
                                            client.responsible_id        as crid,
                                            document.template_id         as dtid,
                                            `document`.`id`,
                                            client.id                    as cid,
                                            `document`.`publish`,
                                            `document_item`.`to_subcount_1_id`,
                                            `document_item`.`to_subcount_1_object`,
                                            `document_item`.`template_id`,
                                            `document_item`.`total`,
                                            IFNULL(`document`.`registration_date`,
                                                   `document`.`created`) as registration_date,
                                            document_item.total          as total_sum,
                                            CONCAT(client.last_name, ' ', client.first_name, ' ',
                                                   client.middle_name)   as client_name
                                     FROM `document_item`
                                              LEFT JOIN `document` ON `document_item`.`document_id` = `document`.`id`
                                              INNER JOIN `client` ON client.id = document_item.to_subcount_1_object

                                     WHERE (`document_item`.`deleted` = 0)
                                       AND (`document_item`.`deleted` = 0)
                                       AND (`document`.`deleted` = 0)
                                       AND (`client`.`publish` = 1)
                                       AND (`client`.`deleted` = 0)
                                       AND ((`document`.`publish` = 1) AND
                                            (IFNULL(`document`.`registration_date`,
                                                    `document`.`created`) >= '2019-06-18' AND
                                             `document`.`created` < '2019-07-30'))
                                     ORDER BY `document_item`.`to_subcount_1_object`)
                                    UNION
                                    (SELECT document.responsible_id      as drid,
                                            client.responsible_id        as crid,
                                            document.template_id         as dtid,
                                            `document`.`id`,
                                            client.id                    as cid,
                                            `document`.`publish`,
                                            `document`.`to_subcount_1_id`,
                                            `document`.`to_subcount_1_object`,
                                            `document`.`template_id`,
                                            `document`.`total`,
                                            IFNULL(`document`.`registration_date`,
                                                   `document`.`created`) as registration_date,
                                            document.total               as total_sum,
                                            CONCAT(client.last_name, ' ', client.first_name, ' ',
                                                   client.middle_name)   as client_name
                                     FROM `document`
                                              INNER JOIN `client` ON client.id = document.to_subcount_1_object
                                     WHERE (`document`.`deleted` = 0)
                                       AND (`document`.`deleted` = 0)
                                       AND (`client`.`publish` = 1)
                                       AND (`client`.`deleted` = 0)
                                       AND (`document`.`to_subcount_1_id` = 5)
                                       AND ((`document`.`publish` = 1) AND
                                            (IFNULL(`document`.`registration_date`,
                                                    `document`.`created`) >= '2019-06-18' AND
                                             `document`.`created` < '2019-07-30'))
                                     ORDER BY `document`.`to_subcount_1_object`)
                                    ORDER BY client_name) unlim) dcms ON dcms.cid = c.id
          where `total` IS NOT NULL
            AND (REPLACE(REGEXP_SUBSTR(c.additional_data, 'uid":"([^"]+)'), 'uid":"', '') <> '')
          HAVING OrderId IS NOT NULL)

         UNION ALL

         (select c.id,
                 c.first_name                                                             AS 'Имя',
                 c.middle_name                                                            as 'Отчество',
                 c.last_name                                                              as 'Фамилия',
                 c.phone,
                 c.email,
                 us.name                                                                  as 'utm_source',
                 ci.amount                                                                as total,
                 ci.paid_date                                                             AS date_paid,
                 ci.paid                                                                  as paid,

                 ci.outside_invoice_number                                                as OrderId,
                 orders.sum                                                               as count_orders,
                 CASE
                     WHEN orders.sum > 0 AND orders.sum < 4 THEN 10
                     WHEN orders.sum > 3 AND orders.sum < 7 THEN 13
                     WHEN orders.sum > 6 AND orders.sum < 10  THEN 15
                     WHEN orders.sum > 9 THEN 17
                     END as tarif,
                 orders.sum * (CASE
                                   WHEN orders.sum > 0 AND orders.sum < 4 THEN 10
                                   WHEN orders.sum > 3 AND orders.sum < 7 THEN 13
                                   WHEN orders.sum > 6 AND orders.sum < 10  THEN 15
                                   WHEN orders.sum > 9 THEN 17
                     END) as reward
          from client c
                   left join utm_source us on utm_source_id = us.id
                   left join cli_en ci on ci.client_id = c.id
                   INNER JOIN (SELECT client_id, count(id) as sum
                               FROM cli_en
                               WHERE (cli_en.publish =1 AND cli_en.paid = 1) AND
                                     (cli_en.created >= '2019-06-18' AND cli_en.created < '2019-07-30') OR cli_en.created IS NULL
                               group by client_id) orders ON orders.client_id = c.id
              AND ((ci.created >= '2019-06-18' AND ci.created < '2019-07-30') OR ci.created IS NULL)
              AND (REPLACE(REGEXP_SUBSTR(c.additional_data, 'uid":"([^"]+)'), 'uid":"', '') <> '')
          HAVING OrderId IS NOT NULL
         )) as a;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как посчитать количество заказов client_invoice.id для каждого клиента в данном запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]