简体   繁体   中英

query returns more than one row

I'm trying to get the total rental amount for each client from Sakila example database so I tried with the following query:

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;

and I get this "Subquery returns more than one row". Do you know what could be wrong? Thank you

This is your query, with some reformatting and the use of table aliases:

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;

I've highlighted the specific cause of your problem. But the fix is to radically simplify the query:

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;

Is that the result you're looking for?

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)

Hope this will help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM