【问题标题】:Compare The non static monthly average with today's average using range使用范围比较非静态月平均与今天的平均
【发布时间】:2021-11-05 10:50:30
【问题描述】:

我是 SQl 的新手,我想创建一个 sql 文件来监控我们的数据库

1-首先,创建非静态且每天都会变化的月平均值

例如:今天是 11 月 5 日,计算从 10 月 4 日到 11 月 4 日的月平均值

2-第二部分:假设月均值为100,今日均值为60。月均值的50%范围为50,(100*50%)。 如果今天的平均值低于每月 50%,那么低于 50 应该通知我们。如果高于就可以了,就像我们的情况一样

谢谢

【问题讨论】:

  • 第二部分没有意义。 60% 范围是什么意思——你绝对不是指 SQL 函数RANGE(),因为它只是输出给定范围的整数表。您是否只想检查您是否在计算平均值的 60% 以内(您几乎总是处于 EOD,60% 为您提供 120% 宽的窗口,那里有很大的余量)
  • 另外,您的 DBMS 是什么?对于 postrges、vs oracle、vs mysql、vs ms sql,一些答案会有所不同。
  • 第二部分:假设月均值为100,今日均值为60。月均值的50%范围为50,(100*50%),如果今日均值小于每月 50% 的愤怒,所以少于 50 应该通知我们。如果高于就可以了,就像我们的情况一样
  • @Andrew 这是云 sql
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: sql average google-cloud-sql


【解决方案1】:

你可以用类似的东西做月平均

SELECT AVG(value_field) FROM table WHERE date_field > CURRENT_DATE-interval '1 month'

不明白你想做的第二件事..

[编辑]

这样的?

WITH monthly_avg AS (
  SELECT AVG(value_field) AS av FROM table WHERE date_field > CURRENT_DATE-interval '1 month' AND date_field < CURRENT_DATE
),
daily_avg as (
  SELECT AVG(value_field) AS av FROM table WHERE date_field = CURRENT_DATE
)
SELECT daily_avg.av>monthly_avg.av FROM monthly_avg, daily_avg;

如果您想收到通知,您可以使用存储过程或其他方式来实现。

【讨论】:

  • 如果每天都有条目,肯定会起作用,但确实取决于应该如何处理丢失的行。
  • 第二部分:假设月均值为100,今日均值为60。月均值的50%范围为50,(100*50%),如果今日均值小于每月 50% 的愤怒,所以少于 50 应该通知我们。如果高于就可以了,就像我们的情况一样
  • @Andrew 无论有多少条目,它都会计算月平均值,我不知道这个问题背后的用例是什么。
  • @jakob22 它计算平均值,可能是 Zahir 想要的平均值,但在不知道数据结构的情况下它可能没有用。如果每天有多行,就像您在销售记录中发现的那样,这给了您一个月内的平均每次销售而不是每日销售的平均值,因为您的除数最终计算错误。
  • @Andrew 这是真的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多