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

Ссылка скопирована
1 ответ

Привет) Суть моей задачи такова - существуют таблицы 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

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Для того чтобы узнать количество совпадающих значений из двух разных таблиц в базе данных, можно воспользоваться SQL запросом, который объединит две таблицы и посчитает количество совпадающих значений.

Пример SQL запроса для подсчета количества совпадающих значений из двух таблиц:

SELECT COUNT(*) 
FROM table1 
JOIN table2 ON table1.column_name = table2.column_name;

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;

SELECT COUNT(DISTINCT table1.column_name) FROM table1 JOIN table2 ON table1.column_name = table2.column_name;

Таким образом, используя подобные SQL запросы, можно легко узнать количество совпадающих значений из двух разных таблиц в базе данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно