sql - SQL如何按状态选择交易金额最高的客户
问题描述
我正在尝试编写一个 SQL 查询,该查询返回每个州花费最多的五个客户的姓名和购买金额。
表模式
customers
|_state
|_customer_id
|_customer_name
transactions
|_customer_id
|_transact_amt
尝试看起来像这样
SELECT state, Sum(transact_amt) AS HighestSum
FROM (
SELECT name, transactions.transact_amt, SUM(transactions.transact_amt) AS HighestSum
FROM customers
INNER JOIN customers ON transactions.customer_id = customers.customer_id
GROUP BY state
) Q
GROUP BY transact_amt
ORDER BY HighestSum
我迷路了。谢谢你。
预期结果是每个州交易量排名前 5 位的客户名称。
ERROR: table name "customers" specified more than once
SQL state: 42712
解决方案
首先,您需要JOIN
正确。其次,您要使用窗口函数:
SELECT ct.*
FROM (SELECT c.customer_id, c.name, c.state, SUM(t.transact_amt) AS total,
ROW_NUMBER() OVER (PARTITION BY c.state ORDER BY SUM(t.transact_amt) DESC) as seqnum
FROM customers c JOIN
transaactions t
ON t.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, c.state
) ct
WHERE seqnum <= 5;
您似乎对 SQL 有几个问题。我将从了解聚合函数开始。你有一个SUM()
别名HighestSum
。它只是每个客户的总数。
推荐阅读
- javascript - 如果我只知道其中的一部分,我如何获得完整的类名?
- java - Google Cloud postgres 实例无法连接到 Spring Boot 应用程序
- karma-jasmine - 代码覆盖结果显示方法名称为红色,但覆盖了方法定义
- javascript - 三分之二更改浏览器后退按钮的功能
- javascript - 如何将不同的名称放入自动生成的文本框中,以便我可以使用复选框将文本放入其中
- python - 使用 None 重塑张量以获得批量大小
- python - 解码/编码外来字符/UnicodeEncodeError:'charmap'编解码器
- javascript - 我们可以使用 .filter() 函数和搜索属性的条件规则吗?
- bash - 在 bash shell 中打印文件数
- spring - 即使健康状态为“Down”,Spring Boot Admin Wallboard 磁贴也是绿色的