Создание оператора SQL для возврата идентификаторов пользователей, которые покупают несколько предметов - PullRequest
4 голосов
/ 15 января 2012

Я уверен, что решение простое, но оно уклоняется от меня.

Таблица настроена так:

TABLE NAME = sales
Field 1 = id INT Auto Increment Primary Key
Field 2 = user_id INT NOT NULL
Field 3 = item VARCHAR(100) NOT NULL

Итак, предположим, я ищу пользователей, которые приобрели следующие предметы:

  • ipod
  • обувь
  • велосипед

Как бы я структурировал SQL-оператор для возврата значений user_id пользователей, которые приобрели каждый из трех предметов (пользователь должен был купитьвсе три пункта)

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Объедините просмотры таблицы для каждого элемента

Требуется особая необходимость, так как пользователь может купить многие из одного элемента.

select distinct(ipod.user_id )
from sales ipod
    inner join sales shoes on shoes.user_id = ipod.user_id 
    inner join sales bike on bike.user_id = ipod.user_id 
where ipod.item  = 'ipod' 
    and shoes.item = 'shoes'
    and bike.item = 'bicycle'
3 голосов
/ 15 января 2012

Этот метод облегчает распространение и на другие элементы:

  select USER_ID, count(distinct ITEM)
    from SALES
   where ITEM in ('ipod', 'shoes', 'bicycle')
group by USER_ID
  having count(distinct ITEM) = 3
1 голос
/ 15 января 2012

Самое простое решение будет следующим.

select user_id
from sales s1
where exists (select user_id from sales s2 
               where item = 'ipod' and s2.user_id = s1.user_id)
and exists (select user_id from sales s2 
               where item = 'shoes' and s2.user_id = s1.user_id)
and exists (select user_id from sales s2 
               where item = 'bycycle' and s2.user_id = s1.user_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...