SQL выборка дубли связной таблицы

267
28 января 2019, 19:00

помогите исправить выборку которая считает количество заказов с авансом есть выборка

SELECT count(order_id) as order_id, prepay_id
FROM `crm_orders`
LEFT JOIN crm_orders_prepay ON prepay_order_id = order_id
WHERE order_add_date between '2018-10-02 00:00:00' and '2018-10-02 23:59:59'
AND order_city = 7
AND prepay_id is not null

но есть проблема что она мне дублирует записи где было более 1 аванса к примеру

order_id
127000
127001
127002
127002

в итоге у меня вместо 3 выдает 4 заказа с авансом подскажите как правильно убрать дубли с таблицы crm_orders_prepay ?

мне достаточно зафиксировать факт аванса

помогло решение с count(distinct id_zakaza)

теперь возникла проблемай с суммой этих заказов

SELECT sum(order_cost_sum) as order_cost_sum
FROM `crm_orders`
LEFT JOIN crm_orders_prepay ON prepay_order_id = order_id
WHERE order_add_date between '2018-10-02 00:00:00' and '2018-10-02 23:59:59'
AND order_city = 7
AND prepay_id is not null

если повторить sum(distinct order_cost_sum) то чистит очень много лишнего ,ребята подскажите как побороть сумму ?

Answer 1

Решение по сумме следующее

select sum(order_cost_sum) as order_cost_sum
  from #crm_orders
 where order_add_date between '2018-10-02 00:00:00' and '2018-10-02 23:59:59'
   and order_city = 7
   and exists (
               select prepay_order_id
                 from #crm_orders_prepay
                where prepay_order_id = #crm_orders.order_id
              )
;

есть еще одно решение

select sum(order_cost_sum) as order_cost_sum
  from #crm_orders
 where order_add_date between '2018-10-02 00:00:00' and '2018-10-02 23:59:59'
   and order_city = 7
   and order_id in (
                    select prepay_order_id
                      from #crm_orders_prepay
                   )
;
Answer 2
SELECT count(order_id) as order_id, prepay_id
FROM `crm_orders`
LEFT JOIN crm_orders_prepay ON prepay_order_id = order_id
WHERE order_add_date between '2018-10-02 00:00:00' and '2018-10-02 23:59:59'
AND order_city = 7
AND prepay_id is not null
group by prepay_id
READ ALSO
PHP Session и Unity3d

PHP Session и Unity3d

Делаю регистрацию/авторизацию в приложении на Unity3d в связке с сервером на PHP+MySQLВстал вопрос: как мне связать переменную session с unity3d? Пример...

217
Регулярное выражение на номер телефона

Регулярное выражение на номер телефона

На сайте есть регулярка на ввод номера телефона

254
Не работает функция по примеру, помогите

Не работает функция по примеру, помогите

Здраствуйте, суть проблемы в том, что я не могу получить значение функции getActive(), исходящей объекта $brand в коде:

242