#mysql #sql
#mysql #sql
Вопрос:
Возникли проблемы с определением того, как найти количество клиентов в базе данных, у которых есть заказ с определенным количеством продуктов в нем. Мне просто нужно вернуть общее количество клиентов, которые соответствуют этому критерию.
Ответ №1:
Шаблон:
SELECT COUNT(DISTINCT curtomer_id) OVER ()
FROM customers
JOIN orders
JOIN products
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) > 20
или, может быть (если функция window не может использоваться в этом контексте)
WITH cte AS ( SELECT DISTINCT curtomer_id
FROM customers
JOIN orders
JOIN products
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) > 20 )
SELECT COUNT(*)
FROM cte
Ответ №2:
Вы можете получить клиентов, которые соответствуют критериям, используя:
select customerNumber, count(distinct od.productcode) as num_products
from orders o join
orderdetails od
on o.ordernumber = od.ordernumber
group by o.ordernumber, o.customernumber
having count(distinct od.productcode) >= 20;
Затем вы можете использовать подзапрос для подсчета клиентов:
select count(distinct customerNumber)
from (select customerNumber, count(distinct od.productcode) as num_products
from orders o join
orderdetails od
on o.ordernumber = od.ordernumber
group by o.ordernumber, o.customernumber
having count(distinct od.productcode) >= 20
) co;