Mysql 在GROUPBY语句中查找max的SQL查询
我有两张桌子,顾客和寄宿处。主键c.客户ID.主键l.提交编号,FK l.客户ID 我需要创建一个查询,显示c.customer\u fname、c.customer\u sname以及总提交金额最高的客户提交的总提交量(其中客户提交了多个提交) 我的尝试:Mysql 在GROUPBY语句中查找max的SQL查询,mysql,sql,oracle,Mysql,Sql,Oracle,我有两张桌子,顾客和寄宿处。主键c.客户ID.主键l.提交编号,FK l.客户ID 我需要创建一个查询,显示c.customer\u fname、c.customer\u sname以及总提交金额最高的客户提交的总提交量(其中客户提交了多个提交) 我的尝试: SELECT c.customer_fname, c.customer_sname, MAX(SUM(l.lodgement_amount)) AS highest_total_lodgements FROM Customers c IN
SELECT c.customer_fname, c.customer_sname, MAX(SUM(l.lodgement_amount)) AS
highest_total_lodgements
FROM Customers c INNER JOIN Lodgements l
ON c.customer_ID = l.customer_ID
GROUP BY c.customer_fname, c.customer_sname;
您似乎只需要一行,即“寄存”最多的客户的行:如果需要,只需
按
订购和限额
:
SELECT c.customer_fname, c.customer_sname, SUM(l.lodgement_amount) AS lodgement_amount
FROM Customers c
INNER JOIN Lodgements l ON c.customer_ID = l.customer_ID
GROUP BY c.customer_id, c.customer_fname, c.customer_sname
ORDER BY lodgement_amount DESC
LIMIT 1
注意,我将客户id添加到GROUPBY
子句中;如果您有两个同名的不同客户,这会更安全
行限制语法因数据库而异。以上内容在MySQL中工作。在Oracle起始版本12中,可以使用fetch
子句:
ORDER BY lodgement_amount DESC
FETCH FIRST 1 ROW ONLY
如果你想打领带,那就有点不同了。在Oracle中,请使用:
ORDER BY lodgement_amount DESC
FETCH FIRST 1 ROW WITH TIES
另一种方法是使用窗口功能:
SELECT *
FROM (
SELECT c.customer_fname, c.customer_sname, SUM(l.lodgement_amount) AS lodgement_amount,
RANK() OVER(ORDER BY SUM(l.lodgement_amount) DESC) rn
FROM Customers c
INNER JOIN Lodgements l ON c.customer_ID = l.customer_ID
GROUP BY c.customer_id, c.customer_fname, c.customer_sname
) t
WHERE rn = 1
MySQL还是Oracle?请只标记一个数据库。哇,谢谢,信息量很大,这个解决方案非常有效。