【问题标题】:How to calculate AVG from two tablets如何从两片平板电脑计算 AVERAGE
【发布时间】:2022-01-20 21:39:11
【问题描述】:

我正在 SSMS 中创建一个数据库,我正在尝试从 2 个平板电脑的 2 列计算 AVG;我写道:

;WITH combined AS
(
    SELECT Datum_narodenia 
    FROM Zamestnanci 
    UNION ALL
    SELECT Datum_narodenia 
    FROM ObčaniaSR
)
SELECT AVG(Datum_narodenia)
FROM combined;

但是我收到了这个错误:

消息 8117,级别 16,状态 1
操作数数据类型日期对于 avg 运算符无效。

我创建了表 1:

CREATE TABLE Zamestnanci
(
    id_Zamestnanca int not null,
    Meno varchar(50) null,
    Priezvisko varchar(50)null,
    Adresa varchar(50) null,
    Datum_narodenia date null,

    PRIMARY KEY (id_Zamestnanca)
);

CREATE TABLE ObčaniaSR
(
    id_Občana int not null,
    Meno varchar(50) null,
    Priezvisko varchar(50) null,
    Adresa varchar(50) null,
    Datum_narodenia date null,
    Zápis_v_trestnom_registry varchar(50) null,

    PRIMARY KEY (id_Občana)
);

Datum_narodenia 表示来自女巫的 Date_of_birth 我尝试计算 AVG。

根据您计算 AVG 年龄的最佳方法是什么?感谢您的回答和建议。

【问题讨论】:

  • 您的 CTE 没有问题,您阅读错误信息了吗?假设您使用的是 SQL Server 给定您的 MSSMS 注释,则您不能在 date 列上使用 avg()
  • @Stu 那么你有什么建议呢?我正在尝试从日期中获取年龄,然后从中获取平均值。有没有可能以这种方式做到这一点?是的,你是对的,我正在使用 SQL 服务器
  • 那么您首先需要的是年龄,而不是日期,请参阅this post
  • @Stu 它给了我30.033994 30 30 我是否必须对两个平板电脑中的所有日期都执行此操作?
  • 除了“你不能平均日期”问题之外,问题中的错误是因为你有一个声明 before WITH 没有正确终止用分号。请get in that habit.

标签: sql sql-server database


【解决方案1】:

非常接近的年龄计算(大量细节in this answer)使用日期和现在之间的小时数除以一年中的小时数(8766/24 = 365.25),它试图大致考虑闰年;它是不完美的,但恕我直言,简单和正确之间的一个很好的权衡:

SELECT DATEDIFF(HOUR,'19860201',GETDATE())/8766;

所以:

;WITH combined AS
(
    SELECT Datum_narodenia 
    FROM Zamestnanci 
    UNION ALL
    SELECT Datum_narodenia 
    FROM ObčaniaSR
)
SELECT AVG(DATEDIFF(HOUR, Datum_narodenia, GETDATE())/8766)
FROM combined;

现在,这会进行整数数学运算,因此您可能想要:

;WITH combined AS
(
    SELECT Datum_narodenia 
    FROM Zamestnanci 
    UNION ALL
    SELECT Datum_narodenia 
    FROM ObčaniaSR
)
SELECT CONVERT(DECIMAL(5,1), 
  AVG(DATEDIFF(HOUR, Datum_narodenia, GETDATE())/8766.0))
FROM combined;

【讨论】:

  • 我得到了47.5,这是该值的正确 AVG。所以谢谢你
猜你喜欢
  • 2014-06-13
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多