2014-08-31 64 views
1

我想获得总租金数额从的Sakila例如数据库的每个客户端 所以我用下面的查询尝试:查询返回不止一行

select customer.customer_id, customer.first_name, 
(select sum(payment.amount) from customer 
inner join rental on customer.customer_id=rental.customer_id 
inner join payment on rental.rental_id=payment.rental_id group by payment.amount) 
from customer 
inner join rental on customer.customer_id=rental.customer_id 
inner join payment on rental.rental_id=payment.rental_id 
group by customer.customer_id; 

,我得到这个“子查询返回多个比一行“。你知道什么可能是错的吗?谢谢

回答

2

这是您的查询,有一些格式化和使用表别名:

select c.customer_id, c.first_name, 
     (select sum(p2.amount) 
     from customer ce inner join 
      rental r2 
      on c2.customer_id = r2.customer_id inner join 
      payment p2 
      on r2.rental_id = p2.rental_id 
     group by p2.amount 
-------^ 
    ) 
from customer c inner join 
    rental r 
    on c.customer_id = r.customer_id inner join 
    payment p 
    on r.rental_id = p.rental_id 
group by c.customer_id; 

我突出你的问题的具体原因。但修复是从根本上简化查询:

select c.customer_id, c.first_name, sum(p.amount) 
from customer c left join 
    rental r 
    on c.customer_id = r.customer_id left join 
    payment p 
    on r.rental_id = p.rental_id 
group by c.customer_id; 
1

这是你要找的结果吗?

SELECT C.customer_id 
    ,C.first_name 
    ,SUM(P.amount) AS [total_amount] 
FROM customer C 
INNER JOIN rental R ON R.customer_id = C.customer_id 
INNER JOIN payment P ON P.rental_id = R.rental_id 
GROUP BY C.customer_id, C.first_name 
-- Condition to get only the largest amount 
-- without using an ORDER BY clause 
HAVING SUM(P.amount) = (SELECT MAX(SUM(P2.amount)) 
              FROM rental R2 
              INNER JOIN payment P2 ON P2.rental_id = R2.rental_id 
              GROUP BY R2.customer_id) 

希望这会帮助你。

+0

是的,谢谢你^^你知道我怎样才能使用最大功能来确定最大的客户? (不使用“ORDER BY”?) – user3587175 2014-08-31 22:31:53

+0

获得用户数量最多的最佳方法是使用ORDER BY子句。但如果你想使用MAX函数,我建议你添加一个HAVING子句(我更新了我的查询来说明我的意思)。希望这会帮助你 – 2014-09-01 04:25:08