Mysql 查询返回多行

Mysql 查询返回多行,mysql,sql,database,subquery,Mysql,Sql,Database,Subquery,我试图从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

我试图从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;

我得到这个“子查询返回多行”。你知道会出什么问题吗?谢谢您

这是您的查询,需要重新格式化并使用表别名:

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;

这就是你想要的结果吗

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)

希望这能对您有所帮助。

是的,谢谢^^您知道如何使用max函数来确定金额最大的客户吗?(不使用“ORDER BY”?)获取用户最大金额的最佳方法是使用ORDER BY子句。但是如果您想使用MAX函数,我建议您添加HAVING子句(我更新了查询以说明我的意思)。希望这能对你有所帮助