Nikolino
@Nikolino

Как правильно написать запрос?

В базе данных есть следующие таблицы:

CREATE TABLE orders(
	id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
	order_number VARCHAR(100) NOT NULL
);

CREATE TABLE products(
	id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
	title VARCHAR(100) NOT NULL
);

CREATE TABLE orders_products (
	order_id INT(10) NOT NULL, 
	product_id INT(10) NOT NULL
);


Нужно вывести два любых заказа, у которых максимальное количество общих товаров.

Вот мой вариант, но какой-то велосипедный, полагаю можно как-то проще и понятнее это написать:
SELECT a.order_id,COUNT(b.product_id) as count 
FROM orders_products a, orders_products b 
WHERE a.product_id = b.product_id AND a.order_id != b.order_id 
GROUP BY a.order_id 
ORDER BY count DESC 
LIMIT 2
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Endinador
Можно попробовать через CTE, хотя тут велосипедности не меньше.
with cte as (select product_id, count(order_id) as cnt from orders_products)

select top 1 a.product1, b.product2, a.cnt
from cte as a
left join cte as b on b.cnt = a.cnt and a.product_id > b.product_id
order by a.cnt desc
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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