SQL: исключить пользователей, где хотя бы одна строка совпадает

0

У меня есть база данных пользователей (id, name), которая связана с базой данных их покупок (id, userId, price). То, что я хочу сделать, - это найти всех пользователей, которые не совершили покупку с ценой 500. Сначала я, хотя о таком запросе, но возвращал все строки, где цена не 500, а не сами пользователи.

select * from purchase p
join user u on u.id = p.userId
and price != 500

Есть ли у кого-нибудь идея, как сгруппировать его, чтобы отображались только пользователи, которые НИКОГДА не делали 500 покупок?

Теги:

1 ответ

2
Лучший ответ

Один из способов состоит в том, чтобы группировать пользователя и брать только те группы, у которых нет purchase по price 500

select u.id, u.name
from user u
left join purchase p on u.id = p.userId
group by u.id, u.name
having sum(p.price = 500) = 0
  • 0
    Не приведет ли сумма (p.price = 500) к суммированию всех цен? Что мне нужно, так это единственная покупка стоимостью 500 штук.
  • 0
    sum(p.price) будет складывать их вместе. sum(p.price = 500) добавляет , сколько раз это условие было true . Вы также можете написать sum(case when p.price = 500 then 1 else 0 end)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню