如何更正此 SQL 查询?
Posted
技术标签:
【中文标题】如何更正此 SQL 查询?【英文标题】:How can I correct this SQL query? 【发布时间】:2020-10-20 22:19:37 【问题描述】:我正在使用 DB2 表。每个客户都有多个资金余额存储在“余额”列和“As_of_date”列中,以跟踪他们从那以后获得该余额的日期。我需要退回过去 90 天内总余额超过 100 万的所有客户。
我不知道该怎么做。我是 SQL 新手
select Customer from MyTable
where As_of_date >= (current_date - 90 DAYS)
HAVING SUM(Balance) >= '1000000.00'
【问题讨论】:
请提供样本数据、所需结果和适当的数据库标签。什么是“汇总余额”? 将某人的余额快照相加有意义吗?如果我在 7 月有 7000 余额,在 8 月有 8000 余额,那么说我有 15,000 是没有意义的。如果我按周进行快照呢? 7月1日7000。7月8日7000,7月15日6000,7月22日8000,7月29日7000。总和是35000,但我没有比以前更多的钱。也许您想要平均余额? 【参考方案1】:~不清楚这是什么数据库引擎~(哎呀:说v清楚DB2!),或者为什么到处都是大写字母,但这里或多或少是sql伪代码的答案:
select Customer, sum(Balance) as CustomerBalance
from Mytable
where As_of_date >= (current_date - 90 DAYS)
group by Customer
having CustomerBalance > 1000000
解释:
我们要选择所有客户及其所有余额, 但我们首先过滤掉任何超过 90 天的内容(where as_of_date ...
子句)
group by
按客户细分数据,因此对于每个客户,我们会提取他们的所有余额(过去 90 天)并为每个客户返回一个值(总和)
最后,having
子句丢弃 【讨论】:
解释将使它成为一个更好的答案。where
子句过滤单个行,但having
过滤由group by
定义的组。请注意,DB2 不接受 having
中的列别名。
@Schwern 感谢您指出这一点。除了你的解释之外,我还试着解释一下。
DB2 不喜欢别名 CustomerBalance
是的,所有的名字都很奇怪。不知道发布者使用的是哪种数据库;如果我只是坚持他们奇怪的约定,他们会解密回他们宇宙中任何有意义的东西,哈哈......
哈哈!没问题,我很感激你的时间:)以上是关于如何更正此 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章