Как узнать количество совпадающих значений из двух разных таблиц?
Привет) Суть моей задачи такова - существуют таблицы clients и orders, в которых хранится информация о клиентах и заказах соответственно. В clients хранится user_id и дата регистрации (registered_datetime), в orders хранится также user_id и дата начала заказа (when_start). Так вот, мне нужно выяснить количество user_id, у которых день регистрации и день заказа совпадает ( только за сентябрь 2021 ). Подскажите, как я могу это сделать ?
Дополнительно:
Самый обычный INNER JOIN по идентификатору и дате.
Ответы:
какая СУБД !?
У разных СУБД свои методы/функции работы с датами, а я так понимаю у вас хранится дата+время!?
да и синтаксис 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' ; |
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) ) ; |
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) ) ;
Учимся использовать конструкцию 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 ); |
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
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы узнать количество совпадающих значений из двух разных таблиц в базе данных, можно воспользоваться SQL запросом, который объединит две таблицы и посчитает количество совпадающих значений.
Пример SQL запроса для подсчета количества совпадающих значений из двух таблиц:
SELECT COUNT(*) FROM table1 JOIN table2 ON table1.column_name = table2.column_name;
В данном запросе мы используем оператор JOIN для объединения двух таблиц по заданному столбцу (column_name). Затем мы используем функцию COUNT(*) для подсчета количества совпадающих значений.
Если необходимо узнать количество уникальных совпадающих значений, то можно использовать функцию COUNT(DISTINCT column_name), где column_name - это столбец, по которому происходит сравнение.
Пример SQL запроса для подсчета количества уникальных совпадающих значений из двух таблиц:
SELECT COUNT(DISTINCT table1.column_name) FROM table1 JOIN table2 ON table1.column_name = table2.column_name;
Таким образом, используя подобные SQL запросы, можно легко узнать количество совпадающих значений из двух разных таблиц в базе данных.