SQL-запрос для поиска людей, которые купили более 3 товаров в предложении where

#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 игр :
введите описание изображения здесь