SQL-查询无效,因为聚合函数对每个日期和ID进行简单计算
我对SQL非常陌生(不到100小时)。问题案例如下所述。每次我尝试查询时,要么得到不正确的输出,要么出现“未包含在聚合函数或GROUP BY子句中”的错误 尝试搜索类似的问题或示例,但没有结果。我现在迷路了。 请帮忙 我有三张桌子 表CalcSQL-查询无效,因为聚合函数对每个日期和ID进行简单计算,sql,join,aggregate-functions,Sql,Join,Aggregate Functions,我对SQL非常陌生(不到100小时)。问题案例如下所述。每次我尝试查询时,要么得到不正确的输出,要么出现“未包含在聚合函数或GROUP BY子句中”的错误 尝试搜索类似的问题或示例,但没有结果。我现在迷路了。 请帮忙 我有三张桌子 表Calc Source_id | date(yyyymmdd) | metric1 | metric 2 ------------------------------------------------- 1 | 20201010 | 2
Source_id | date(yyyymmdd) | metric1 | metric 2
-------------------------------------------------
1 | 20201010 | 2 | 3
2 | 20201010 | 4 | 5
3 | 20201010 | 6 | 7
1 | 20201011 | 8 | 9
2 | 20201011 | 10 | 11
3 | 20201011 | 12 | 13
1 | 20201012 | 14 | 15
2 | 20201012 | 16 | 17
3 | 20201012 | 18 | 19
表源
Source_id | Description
------------------------
1 | ABC
2 | DEF
3 | XYZ
表系数
Date | Factor
-----------------
20201010 | .3
20201011 | .5
20201012 | .7
如果用户选择的日期为20201010至20201012,则结果将为
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | ((2x3)x.3+(8x9)x.5)/2
DEF | ((4x5)x.3+(10x11)x.5)/2
XYZ | ((6x7)x.3+(12x13)x.5)/2
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | (14x15)x.7
DEF | (16x17)x.7
XYZ | (18x19)x.7
要求的结果
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | (((2x3)x.3 + (8x9)x.5 + (14x15)x.7))/(No of dates selected in this case =3)
DEF | (((4x5)x.3+ (10x11)x.5 + (16x17)x.7))/(No of dates selected in this case =3)
XYZ | (((6x7)x.3+ (12x13)x.5 + (18x19)x.7))/(No of dates selected in this case =3)
日期将是用户定义的输入,因此计算值应为许多日期的平均值。所选日期将始终在范围内定义,而不是随机多个选择
在表calc中,源id和日期将是唯一的。
每个日期都有一个系数,该系数将与该日期的所有源id相乘
若用户选择的日期为20201010至20201011,则结果为
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | ((2x3)x.3+(8x9)x.5)/2
DEF | ((4x5)x.3+(10x11)x.5)/2
XYZ | ((6x7)x.3+(12x13)x.5)/2
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | (14x15)x.7
DEF | (16x17)x.7
XYZ | (18x19)x.7
如果用户选择的日期为20201012,则结果将为
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | ((2x3)x.3+(8x9)x.5)/2
DEF | ((4x5)x.3+(10x11)x.5)/2
XYZ | ((6x7)x.3+(12x13)x.5)/2
Source_id | Calculated Value
-------------------------------------------------------------------------------
ABC | (14x15)x.7
DEF | (16x17)x.7
XYZ | (18x19)x.7
创建CTE以存储开始和结束日期,并将其交叉连接到表的连接,按源分组和聚合:
WITH cte AS (SELECT '20201010' min_date, '20201012' max_date)
SELECT s.Description,
ROUND(SUM(c.metric1 * c.metric2 * f.factor / (DATEDIFF(day, t.min_date, t.max_date) + 1)), 2) calculated_value
FROM cte t CROSS JOIN Source s
LEFT JOIN Calc c ON c.Source_id = s.Source_id AND c.date BETWEEN t.min_date AND t.max_date
LEFT JOIN Factor f ON f.date = c.date
GROUP BY s.Source_id, s.Description
请参阅。结果:
这个计算毫无意义。该系数似乎应用于日期级别,但所有三行的日期都相同。因此,不清楚在计算中如何确定系数。@GordonLinoff校正完成。