下面显示了那些在11.98以上进行交易的人,但它显示了所有交易,甚至是在11.98以下的交易。我只想要高于11.98的那些
select p.
customer_id, first_name,amount
from customer
inner join payment p on p.customer_id=customer.customer_id
where p.
customer_id in (
select
customer_id
from payment
group by amount,customer_id
having min(amount) > 11.98
)
order by customer_id
简单的where
子句怎么样?
select c.customer_id, c.first_name, p.amount
from customer c inner join
payment p
on p.customer_id = c.customer_id
where p.amount > 11.98
order by c.customer_id;
这只会自动返回金额大于11.98的客户。
如果要为only金额大于11.98的客户提供详细信息,请使用窗口功能,以便可以根据每个客户的最低金额进行过滤:
select c.customer_id, c.first_name, p.amount
from customer c inner join
(select p.*,
min(p.amount) over (partition by p.customer_id) as min_amount
from payment p
) p
on p.customer_id = c.customer_id
where min_amount > 11.98
order by c.customer_id;
我认为最好使用:
select p.customer_id, c.first_name, sum(p.amount) as amount
from customer c
join payment p on p.customer_id = c.customer_id
group by p.customer_id, c.first_name
having sum(q.amount) > 11.98
order by p.customer_id, c.first_name
考虑每个人(名字)和客户ID的组合是相邻且唯一的。
但是如果您单独考虑每笔付款,请使用:
select p.customer_id, c.first_name, p.amount
from customer c
join payment p on p.customer_id = c.customer_id
where p.customer_id in (
select customer_id
from payment
group by customer_id
having min(amount) > 11.98
)
order by p.customer_id;
只需从amount
中删除group by amount,customer_id