如何从下面的代码中获得正确的结果?

问题描述 投票:0回答:2

下面显示了那些在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
sql postgresql
2个回答
0
投票

简单的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;

0
投票

我认为最好使用:

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

© www.soinside.com 2019 - 2024. All rights reserved.