Mysql оставил соединение с различными значениями - PullRequest
0 голосов
/ 07 июля 2019

У меня возникла проблема с левой таблицей соединений (заказы) с таблицей (messages_providers), в уведомленных поставщиках много повторяющихся данных, мне нужно объединить таблицу с одной записью без дубликатов

Пыталсяиспользовать разные, но дает сбой, я впервые использую distinc с левым соединением

SELECT `u`.`firstName` AS `u.firstName`,`u`.`lastName` AS `u.lastName`,`u`.`phoneNumber` AS `u.phoneNumber`,
    count(distinct `np`.`id`) as `count_notified_providers`,
    coalesce(sum(CASE WHEN (`o`.`orderStatus` = 4) THEN (1) ELSE (0) END), 0) as `sum_Completed`,
    coalesce(sum(CASE WHEN (`np`.`status` = 1 OR `np`.`status` = 2) THEN (1) ELSE (0) END), 0) as `sum_Total_accepted`,
    coalesce(sum(CASE WHEN (`o`.`orderStatus` = 5) THEN (1) ELSE (0) END), 0) as `sum_Cancelled_order_by_customer`,
    coalesce(sum(CASE WHEN (`o`.`orderStatus` = 11) THEN (1) ELSE (0) END), 0) as `sum_Cancelled_order_by_provider`,
    coalesce(sum((CASE WHEN (`o`.`orderStatus` = 11) THEN (1) ELSE (0) END + CASE WHEN (`o`.`orderStatus` = 5) THEN (1) ELSE (0) END + CASE WHEN (`o`.`orderStatus` = 4) THEN (1) ELSE (0) END)), 0) as `sum_Total_orders` 
FROM `providers` AS `p`
LEFT JOIN `users` AS `u`
ON `p`.`userId` = `u`.`id`
LEFT JOIN `orders` AS `o`
ON `p`.`id` = `o`.`providerId`
LEFT JOIN `notified_providers` AS `np`
ON `o`.`id` = `np`.`orderId`
WHERE (((DATE(DATE_FORMAT((`o`.`createdAt`),"%Y-%m-%d"))) > date(now() - interval 1 week)))
GROUP BY `u`.`firstName`,`u`.`lastName`,`u`.`phoneNumber`
ORDER BY `u.firstName` ASC, `u.lastName` ASC, `count_notified_providers` DESC

Я не хочу менять результат, он показывает правильную структуру, но из-за дублированных данных он возвращает неправильные значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...