SQL Подсчитывает клиентов, у которых продукты одинаковые

#sql #group-by #count

Вопрос:

У меня проблема. У меня есть база данных SQL с именем customers из 3 столбцов Country , CustomerID и Product . С помощью этой базы данных я хочу подсчитать всех клиентов, которые купили велосипед, флягу и шлем, но сгруппированы по странам, как вы можете видеть на следующем рисунке.

Есть ли шанс, что ты сможешь мне в этом помочь? Я предполагаю, что мне нужно объединить одну и ту же таблицу и выполнить вложенный запрос с другим выбором, но я действительно не знаю, как это сделать.

Я был бы очень благодарен вам за помощь!

введите описание изображения здесь

Комментарии:

1. Неясно, должны ли клиенты приобретать все три продукта или какой-либо из продуктов.

2. извините за поздний ответ, но в данном случае я хочу, чтобы клиенты, которые приобрели все упомянутые продукты

Ответ №1:

Вы должны выполнить агрегацию в два этапа. Сначала найдите клиентов с 3 различными продуктами, затем подсчитайте этих клиентов.

 SELECT country, count(*)
FROM
(
  SELECT country, CustomerID 
  FROM customers 
  WHERE product IN ('Bike','Flask','Helmet') 
  GROUP BY country, CustomerID
  HAVING COUNT(distinct product) = 3
) dt
GROUP BY country
 

Ответ №2:

Вы можете использовать HAVING предложение вместе с GROUP BY » в то время как отчетливо учитывается для каждого клиента после подсчета для этих точных трех продуктов, таких как

 SELECT Country, COUNT(DISTINCT CustomerID) AS Count 
  FROM customers 
 WHERE Product IN ('Bike','Flask','Helmet') 
   AND CustomerID IN ( SELECT CustomerID 
                         FROM customers 
                        GROUP BY CustomerID 
                       HAVING COUNT(DISTINCT Product)=3 )
 GROUP BY Country
 

Demo

Ответ №3:

Попробуйте этот sql:

 select Country,count(distinct CustomerID) 
from customers 
where Product in ('Bike','Flask','Helmet') 
group by Country
 

Ответ №4:

выберите страну,количество(отдельный идентификатор клиента) из числа клиентов, в которых продукт («Велосипед», «Фляга», «Шлем») сгруппирован по странам

Ответ №5:

 SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING Product in ('Bike','Flask','Helmet');