SQL查询用于查找用户每月的最大金额[重复]

Posted

技术标签:

【中文标题】SQL查询用于查找用户每月的最大金额[重复]【英文标题】:SQL query for finding maximum amount month wise with the user [duplicate] 【发布时间】:2020-07-26 21:01:10 【问题描述】:

我想与已完成最大金额的用户一起打印每月的最大金额。我的表结构是

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| customername | varchar(20) | YES  |     | NULL    |       |
| processed_at | date        | YES  |     | NULL    |       |
| amount       | int(11)     | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

和 每月打印最大总和的查询是

SELECT MAX(A.AMT), A.month
FROM ( SELECT customername,SUM(amount) AS AMT, EXTRACT( month from processed_at) as month
FROM payments
GROUP BY customername,month) AS A
GROUP BY  2;

这是给出结果

| MAX(A.AMT) | month |
+------------+-------+
|       1900 |     4 |
|       2400 |     3 |

有没有一种方法可以将客户名也映射到最大金额?

【问题讨论】:

您错误地标记了两个不同的 DBMS:Oracle 和 mysql。您正在使用这两个中的哪一个以及确切的版本? 无论如何,这是这些标签下最常见的问题。 更新为 MySQL 您想显示每个客户每月的最大金额还是仅显示每个月?无论如何,您可以使用子查询来显示该月的最大客户价值。 哪个 MySQL 版本? 【参考方案1】:

如果您运行的是 MySQL 8.0,则可以为此使用窗口函数:

SELECT *
FROM (
    SELECT 
        customername,
        SUM(amount) amt, 
        DATE_FORMAT(processed_at, '%Y-%m-01') yr_month,
        RANK() OVER(PARTITION BY DATE_FORMAT(processed_at, '%Y-%m-01') ORDER BY SUM(amount) DESC) rn
    FROM payments
    GROUP BY customername, yr_month
) t
WHERE rn = 1

请注意,这包括 GROUP BY 子句中的月份年,以防您的数据分布超过 12 个月。

在早期版本中,一种选择是使用 HAVING 子句和相关聚合查询进行过滤:

SELECT 
    customername,
    SUM(amount) amt, 
    DATE_FORMAT(processed_at, '%Y-%m-01') yr_month
FROM payments p
GROUP BY customername, yr_month
HAVING COUNT(*) = (
    SELECT SUM(p1.amount)
    FROM payments p
    WHERE DATE_FORMAT(p1.processed_at, '%Y-%m-01') = yr_month
    GROUP BY p1.customername
    ORDER BY SUM(p1.amount) DESC
    LIMIT 1
)

【讨论】:

以上是关于SQL查询用于查找用户每月的最大金额[重复]的主要内容,如果未能解决你的问题,请参考以下文章

每月汇总金额的 SQL 数据透视表

在SQL Server表查询中查找不同的用户

Sql 查询以查找缺少的每月付款

LeetCode:Database 65.每月交易 I

LeetCode:Database 68.每月交易II

sql怎么查每月数据总数