Mysql SQL-通过差分方法缩小术语

Mysql SQL-通过差分方法缩小术语,mysql,sql,sql-query-store,Mysql,Sql,Sql Query Store,我有一个试图访问的SQL数据库,如果每个条目的最大值和最小值之间的差值超过某个阈值,我需要的是所有术语的平均值 因此,为了利益起见,我们有以下几点: +------------+------+---------+ | Date | Name | Number | +------------+------+---------+ | 2017-01-03 | Dude | 1000000 | | 2017-01-03 | Dude | 2000000 | | 201

我有一个试图访问的SQL数据库,如果每个条目的最大值和最小值之间的差值超过某个阈值,我需要的是所有术语的平均值

因此,为了利益起见,我们有以下几点:

+------------+------+---------+  
|    Date    | Name | Number  |  
+------------+------+---------+  
| 2017-01-03 | Dude | 1000000 |  
| 2017-01-03 | Dude | 2000000 |  
| 2017-01-04 | Dude | 7000000 |  
| 2017-01-04 | Dude | 8750000 |  
+------------+------+---------+  
现在,我想计算2017-01-03日期的平均值,但前提是该日期的最大值和最小值之间的差值大于/小于X。当然,我的实际表格要大得多,因此删除数据并在VBA中循环是没有帮助的

我的理想输出是:

+------------+------+---------+  
|    Date    | Name | AVGnum  |  
+------------+------+---------+  
| 2017-01-03 | Dude | X       |  
| 2017-01-04 | Dude | Y       |  
+------------+------+---------+  
其中X和Y是数字的平均值,当且仅当当天最大值和最小值之间的差值大于指定的X时

非常感谢

类似这样:

select date, name,
       (case when max(num) - min(num) > @X then avg(num) end) as avgnum
from t
group by date, name;
这会将
NULL
s置于差异不符合条件的位置

如果要筛选出行,请使用
having

select date, name, avg(num) as avgnum
from t
group by date, name
having max(num) - min(num) > @X
大概是这样的:

select date, name,
       (case when max(num) - min(num) > @X then avg(num) end) as avgnum
from t
group by date, name;
这会将
NULL
s置于差异不符合条件的位置

如果要筛选出行,请使用
having

select date, name, avg(num) as avgnum
from t
group by date, name
having max(num) - min(num) > @X
有点像:

SELECT table.Date,
       table.Name,
       AVG(table.number)
  FROM table
 WHERE table.Date = '2017-01-03'
 GROUP BY table.Date,
       table.Name
HAVING MAX(table.Number) - MIN(table.Number) < X
   AND MAX(table.Number) - MIN(table.Number) > X
选择表格日期,
表.名称,
平均值(表号)
从桌子上
其中表日期='2017-01-03'
按表分组。日期,
表.名称
最大(表号)-最小(表号)X
请注意,只有符合having条件的数字才会用于平均值计算

通过“have”,您可以在GROUP BY中使用聚合函数。

类似于:

SELECT table.Date,
       table.Name,
       AVG(table.number)
  FROM table
 WHERE table.Date = '2017-01-03'
 GROUP BY table.Date,
       table.Name
HAVING MAX(table.Number) - MIN(table.Number) < X
   AND MAX(table.Number) - MIN(table.Number) > X
选择表格日期,
表.名称,
平均值(表号)
从桌子上
其中表日期='2017-01-03'
按表分组。日期,
表.名称
最大(表号)-最小(表号)X
请注意,只有符合having条件的数字才会用于平均值计算


通过“have”,您可以在GROUP BY中使用聚合函数。

当差值不超过X时会发生什么?当差值不超过X时会发生什么?