2014-08-31 88 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