@maks78945

Как получить список всех пользователей и количество заказов по каждому пользователю?

Доброго времени суток, у меня есть 2 таблицы:
Пользователи: КодПользователя, Имя
Заказы: КодЗаказа, КодПользователя, КодКлиента, ДатаЗаказа, СуммаЗаказа

я хочу получать за определенную дату количество и сумму все заказов пользователя, если в этот период нету заказов у пользователя получать 0.

Я пришёл к вот такому варианту:
SELECT 
  `Пользователи`.`Имя`,
  count(`Заказы`.`КодЗаказа`) as counts,
  sum(`Заказы`.`СуммаЗаказа`) as sums
FROM
  `Пользователи`
LEFT JOIN 
  `Заказы` on `Пользователи`.`КодПользователя` = `Заказы`.`КодПользователя`
WHERE
  `Заказы`.`ДатаЗаказа` BETWEEN '2021-03-29' AND '2021-03-30' OR
  `Заказы`.`ДатаЗаказа` IS NULL
  
group BY
  `Пользователи`.`КодПользователя`


Но я столкнулся с проблемой, а именно если у пользователя есть заказ но 28.03, этот пользователь не попадает в выборку. Т.Е. при задании любой даты я хочу получить список всех пользователей которые существуют, а поле Сумма и Количество заказов по дате заказа.
  • Вопрос задан
  • 1217 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Использовать русские имена в базе данных - плохая практика, поэтому:
SELECT 
  `users`.`name`,
  COUNT(`orders`.`id`) as counts,
  COALESCE(SUM(`orders`.`amount`), 0) as sums
FROM
  `users`
LEFT JOIN `orders` ON 
  `users`.`id` = `orders`.`user_id` AND 
  `orders`.`date` BETWEEN '2021-03-29' AND '2021-03-30'  
GROUP BY
  `users`.`id`, `users`.`name`;


MySQL fiddle
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы