У меня есть база данных пользователей (id, name), которая связана с базой данных их покупок (id, userId, price). То, что я хочу сделать, - это найти всех пользователей, которые не совершили покупку с ценой 500. Сначала я, хотя о таком запросе, но возвращал все строки, где цена не 500, а не сами пользователи.
select * from purchase p
join user u on u.id = p.userId
and price != 500
Есть ли у кого-нибудь идея, как сгруппировать его, чтобы отображались только пользователи, которые НИКОГДА не делали 500 покупок?
Один из способов состоит в том, чтобы группировать пользователя и брать только те группы, у которых нет 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
sum(p.price)
будет складывать их вместе.sum(p.price = 500)
добавляет , сколько раз это условие былоtrue
. Вы также можете написатьsum(case when p.price = 500 then 1 else 0 end)