【问题标题】:Comparing Previous Averages With Current Average将以前的平均值与当前平均值进行比较
【发布时间】:2015-03-12 23:19:30
【问题描述】:

我有一张如下表:

Date | Person | Amount_Spent
42500  A        100 
42499  A        90 
42498  A        95

我想要一个查询,可以获取当前日期(存储为 excel 日期)并向人们显示在给定日期(在本例中为 42500)花费的金额之间的差异,即 100 和最后 3 个的平均值天(即 42500 >= x >= 42498)例如,即 95 大于某个数量,即 2。

在这个例子中,输出应该是:

Person
A   

请确保解决方案能够应对会有多个不同的人的事实,有些人也不会每天都花,所以查询应该只平均平均窗口中的值,我想应该将 GROUP BY 作为一种将人们分组在一起的方式。

谢谢!

【问题讨论】:

  • 放入你的数据库标签。(mysql or sql server or oracle etc.)
  • 你能告诉我们你已经尝试过什么吗?
  • 我不知道如何组合两个查询,不幸的是我没有任何对乔恩有用的东西。我尝试过的一切都不成功

标签: mysql sql sqlite


【解决方案1】:

让我们把它分成两部分:

  1. 计算给定日期的 AVG:

    SELECT AVG(Amount_Spent) FROM table_name WHERE DATE IN (42500, 42499, 42498);

  2. 检索所有符合条件的人:

    从表名中选择人 日期在哪里(42500、42499、42498) AND Amount_Spent >= (SELECT AVG(Amount_Spent) FROM table_name WHERE DATE IN (42500, 42499, 42498));

这假设日期存储为整数,并且您希望在日期子集上计算平均值。仅检索在这些日期花费超过平均金额的人。

【讨论】:

  • 如果您只希望每个人有一个条目,您可能希望将其更改为“SELECT DISTINCT”。
  • 这很好,但如果我没记错的话,AVG 查询不是计算所有人的平均值吗?我只希望它与所讨论的人平均。有没有办法做到这一点?为了澄清,我试图监控特定人的每日支出与他们的特定平均支出并返回所有这些人。
猜你喜欢
  • 2015-05-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2022-11-03
相关资源
最近更新 更多