#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
Ответ №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');