Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在GROUPBY语句中查找max的SQL查询_Mysql_Sql_Oracle - Fatal编程技术网

Mysql 在GROUPBY语句中查找max的SQL查询

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

我有两张桌子,顾客和寄宿处。主键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 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?请只标记一个数据库。哇,谢谢,信息量很大,这个解决方案非常有效。