#mysql #sql
Вопрос:
Я хочу отфильтровать людей, которые купили >=3 игры. Это мой запрос, и я не могу получить правильные результаты и получаю ошибку
select PRODUCT_ID, CUSTOMER_ID,EMAIL,PRODUCT_NAME
from People_who_bought_games
where count(PRODUCT_ID)>=3
как правильно это написать? Любая помощь будет признательна
Также попытался выполнить этот запрос, но получил сообщение об ошибке,
select PRODUCT_ID, CUSTOMER_ID,EMAIL,PRODUCT_NAME from People_who_bought_games group by CUSTOMER_ID having count(PRODUCT_ID)>=3
Комментарии:
1.Используйте
HAVING COUNT
вместоWHERE
иGROUP BY
Customer_ID
2. Вы пробовали использовать
GROUP BY
?3. Было бы полезно добавить вашу таблицу и примеры данных
4. попробовал это, но все равно получаю ошибку: выберите PRODUCT_ID, CUSTOMER_ID,АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ,ИМЯ ПРОДУКТА из группы People_who_bought_games по идентификатору ПОЛЬЗОВАТЕЛЯ, имеющему количество(PRODUCT_ID)>=3
Ответ №1:
Привет, ты можешь написать это так:
SELECT PRODUCT_ID, CUSTOMER_ID,EMAIL,PRODUCT_NAME
from People_who_bought_games
Where CUSTOMER_ID in
(Select CUSTOMER_ID
FROM People_who_bought_games
GROUP BY CUSTOMER_ID
HAVING COUNT(PRODUCT_ID)>=3)
Комментарии:
1. Это даст вам всех людей, у которых есть 3 или более продаж, но вы также будете использовать customer_ids несколько раз. Не уверен, что это то, что вам нужно, но дайте мне знать.
Ответ №2:
Для агрегирования и фильтрации вы используете having
и вам нужны group by
неагрегированные столбцы. Было бы полезно, если бы у вас также были некоторые примеры данных и желаемые результаты, однако я бы предложил следующее
SELECT PRODUCT_ID, CUSTOMER_ID, EMAIL, PRODUCT_NAME
from People_who_bought_games
GROUP BY PRODUCT_ID, CUSTOMER_ID, EMAIL, PRODUCT_NAME
HAVING COUNT(*)>=3
Ответ №3:
Здесь у вас есть пример : вам нужно использовать функции группирования и подсчета
DECLARE @People_who_bought_games TABLE(
PRODUCT_ID int,
CUSTOMER_ID int,
email VARCHAR(50),
PRODUCT_NAME VARCHAR(50)
)
INSERT INTO @People_who_bought_games SELECT '1','111','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','111','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','111','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','111','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','222','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','222','example@gmail.com','Book'
INSERT INTO @People_who_bought_games SELECT '1','333','example@gmail.com','Book'
--select 'before' ,* from @Table
SELECT count(*) as NumberBoughtGames,PRODUCT_ID,CUSTOMER_ID,email,PRODUCT_NAME
from @People_who_bought_games
group by PRODUCT_ID,CUSTOMER_ID,email,PRODUCT_NAME
HAVING COUNT(*) >=3
Результат выглядит так и показывает только запись, кто купил более 2 игр :