sql - 创建一个函数来获取 SQL 中的平均值?
问题描述
我有以下行的表格
表格1:
id col1 col2 date
1 ttx 123 13-05-2020
2 abc 436 13-05-2020
1 ccy 879 13-05-2020
下面是有历史记录的主表。
表 2
date col1 col3 col4
13-05-2020 xyz ttx 1
13-05-2020 xyz abc 2
13-05-2020 xyz ccy 3
--------
13-05-2019 xyz ttx 1
13-05-2019 xyz abc 2
13-05-2019 xyz ccy 3
------
col1
表 1 和col3
表 2 的数据相似。
预期输出:
id col1 col2 date average
1 xyz 123 13-05-2020 1
我正在创建一个函数,该函数将col1
anddate
作为输入并返回平均值。
CREATE FUNCTION [dbo].fn_GetData
(
@date DATE ,
@col1 VARCHAR(10)
)
RETURNS INT
AS
BEGIN
DECLARE @result INT;
DECLARE @previousdate DATE;
SET @previousdate = DATEADD(YEAR, -1, CAST(@date AS DATE));
WITH cte1
AS ( SELECT *
FROM table2
WHERE date = @date
AND col3 = @col1
UNION
SELECT *
FROM table2
WHERE date = @previousdate
AND col3 = @col1
)
SELECT @result = 1 / AVG(cte1.col4)
FROM cte1;
RETURN @result;
END;
有更好的方法吗?
解决方案
如果您在很多地方不需要,则不需要计算平均值的功能。您可以使用以下查询来获取平均值。
SELECT t1.id, t1.col1,ot.col4_avg as [average]
FROM table1 AS t1
CROSS APPLY
(
SELECT Avg(CAST(col4 AS DECIMAL(14,2))) as col4_avg
FROM table2 as t2
WHERE t2.date = t1.date and t2.col3 = t1.col1
) as ot(col4_avg)
推荐阅读
- css - CSS:想知道 CSS 中的“\”是什么意思
- r - 如何使用 R 和 COM (RDCOMClient) 为 Excel 指定 UTF-8 单元格值和文件名?
- reactjs - 如何在 React js 中创建日期选择器
- c - 静态内联与内联静态
- django - kubernetes 上的 Postgres+django:django.db.utils.OperationalError:无法连接到服务器:连接超时
- sublimetext3 - Sublime Text 3 快捷方式查找和替换不起作用
- sql - 从具有 2 个字段终止的 txt 文件插入表
- vue-i18n - 如何在 Vue i18n 插件中获取当前语言环境?
- scala - 借助 BigDL 库,TransE 的损失在边际值处达到稳定水平
- string - 如何将字符串格式化为日期时间列并跳过空白值?