Нужно найти количество клиентов, у которых есть заказ с 20 различными продуктами в нем

#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;