如何更正此 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 查询?的主要内容,如果未能解决你的问题,请参考以下文章

需要更正 SQL 查询

基本SQL语句

如何更正 LIKE 数据的 PHP 查询?

SQL 查询未返回预期结果

如何更正此 SQL 脚本中的错误(使用 Azure Datawarehouse 的数据库)

用于创建课程列表的 SQL 查询。通过...分组?