我在mySQL中使用sakila DB。我需要提供2005年支付的最高金额的客户名称(它的功课,我希望可以提出)。我用这个查询解决了这个问题:
SELECT first name, last name, SUM(amount) AS total
FROM sakila.payment JOIN sakila.customer USING(customer_id)
WHERE YEAR(payment_date)=2005
GROUP BY customer_id
ORDER BY total DESC
LIMIT 1
我确信有更优雅的方法来解决这个问题。我不明白为什么这个查询不起作用:
SELECT first name, last name, MAX(total)
FROM
(SELECT first name, last name, SUM(amount) AS total
FROM sakila.payment JOIN sakila.customer USING(customer_id)
WHERE YEAR(payment_date)=2005
GROUP BY customer_id) amounts;
感谢您的帮助。
答案 0 :(得分:0)
第二个只是获得MAX(总数)和随机first_name& random last_name,因为group by在内部查询中(P.S。引用您的“名字”作为别名或者获取正确的字段名称,否则您的查询将不会真正运行)。
此外,您的查询需要一个小的更正(我只是注意到):
SELECT first_name,last_name, total
FROM (
SELECT customer_id, SUM(amount) AS total
FROM sakila.payment JOIN sakila.customer USING(customer_id)
WHERE YEAR(payment_date)=2005
GROUP BY customer_id ) total_alias
INNER JOIN sakila.customer scu ON total_alias.customer_id=scu.customer_id
ORDER BY total DESC
LIMIT 1;
你们正在通过以下方式返回名字和姓氏: 组中的结果要么应用了一个函数(SUM,MIN,MAX等),要么在group by语句中。如果不是这种情况,查询将失败或返回随机数据(取决于查询结构和DBMS)