@Demos333777

Как узнать количество совпадающих значений из двух разных таблиц?

Привет) Суть моей задачи такова - существуют таблицы clients и orders, в которых хранится информация о клиентах и заказах соответственно. В clients хранится user_id и дата регистрации (registered_datetime), в orders хранится также user_id и дата начала заказа (when_start). Так вот, мне нужно выяснить количество user_id, у которых день регистрации и день заказа совпадает ( только за сентябрь 2021 ). Подскажите, как я могу это сделать ?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
erge
@erge
Примус починяю
какая СУБД !?
У разных СУБД свои методы/функции работы с датами, а я так понимаю у вас хранится дата+время!?
да и синтаксис SQL тоже бывает особенный...

если предположить что это MySQL , то использовать функцию DATE() для извлечения даты.
PS: ну либо сами перепишете соответственно

через INNER JOIN

SELECT count(DISTINCT c.user_id) AS first_day_order
  FROM clients c
  INNER JOIN orders o ON c.user_id = o.user_id
  WHERE DATE(c.registered_datetime) = DATE(o.when_start)
    AND DATE(c.registered_datetime) BETWEEN '2021-09-01' AND '2021-09-30'
;


или через EXISTS

SELECT count(c.user_id) AS first_day_order
  FROM clients c
  WHERE DATE(c.registered_datetime) BETWEEN '2021-09-01' AND '2021-09-30'
    AND EXISTS (
          SELECT 1 FROM orders o
            WHERE c.user_id = o.user_id
              AND DATE(c.registered_datetime) = DATE(o.when_start)
        )
;
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
Учимся использовать конструкцию WHERE EXISTS / NOT EXISTS

select count(id) users_with_first_day_order
from users
where exists (
	select 1 from orders where orders.user_id = users.id and orders.order_date = users.registration_date
);


MySQL WHERE EXISTS test
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы