首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取CAST()的AVG()

获取CAST()的AVG()
EN

Stack Overflow用户
提问于 2014-05-13 10:18:28
回答 4查看 620关注 0票数 1

我正在计算一个人在成为付费会员之前的平均时间。

我试图选择创建的ID-日期-第一次付款的日期-创建和第一次付款之间的时间-创建和第一次付款之间的平均时间:

代码语言:javascript
复制
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', FROM XXX.Company C
INNER JOIN -- some innerjoins--
WHERE -- Some conditions --

前四个选择很好。

代码语言:javascript
复制
ID  Date of creation        Date of first payment   'Diff'
1   2013-12-29 00:00:00.000 2014-01-10 18:34:18.000   13
2   2013-12-09 00:00:00.000 2014-01-10 21:07:29.000   33
3   2013-12-12 00:00:00.000 2014-01-10 21:14:01.000   30

我想添加AVG(Diff)作为我的选择查询的平均值。

代码语言:javascript
复制
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', AVG(CAST(Diff as int)) AS Average FROM XXX.Company C
INNER JOIN -- some innerjoins--
WHERE -- Some conditions --

,它提供“无效列名”。

我试着把它改成

代码语言:javascript
复制
SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff', AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average  FROM XXX.Company C

它使以下错误列在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

因此,简单地说,我如何才能获得我的演员的AVG()作为区分呢?

解决方案

我使用了DATEDIFF datediff.asp

DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate)以删除不同的日期时间值,并得到其周围的差异并使用AVG :AVG(DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate))

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-13 12:07:29

我不知道该怎么回答我的问题。但我找到了解决办法:

我使用了DATEDIFF datediff.asp

DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate)以删除不同的日期时间值,并得到其周围的差异并使用AVG :AVG(DATEDIFF(DATEDIFF,C.CreatedDate,CO.CreatedDate))

mods,请关闭此主题:)

票数 0
EN

Stack Overflow用户

发布于 2014-05-13 10:22:37

您必须按某些值进行分组,以便让数据库知道应用avg的位置:

代码语言:javascript
复制
SELECT C.CompanyId
,      AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average
FROM   XXX.Company C
GROUP
BY     C.CompanyId

另外,你的平均和差异是相互冲突的,所以你必须禁用这个转换。

如果希望对公司中的所有行进行分组,并且创建两个日期字段,则:

代码语言:javascript
复制
SELECT C.CompanyId
,      C.CreatedDate
,      CO.CreatedDate
,      CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff'
,      AVG(CAST(CO.CreatedDate - C.CreatedDate as int)) AS Average
FROM   XXX.Company C
GROUP
BY     C.CompanyId
,      C.CreatedDate
,      CO.CreatedDate
票数 0
EN

Stack Overflow用户

发布于 2014-05-13 10:23:17

就目前情况而言,您需要在CAST(...)中重复AVG(),即CAST() as Diff, AVG(CAST(...)) as Average.

您可以避免重复,并通过将CAST查询包装到内部派生表中,然后将AVG聚合应用于该派生表,如下所示:

代码语言:javascript
复制
SELECT CompanyId, CreatedDate, CreatedDate, AVG(CAST(Diff as int)) AS Average 
FROM
(
   SELECT C.CompanyId, C.CreatedDate, CO.CreatedDate,
   CAST(CO.CreatedDate - C.CreatedDate as int) AS 'Diff'
   FROM XXX.Company C
   INNER JOIN -- some innerjoins--
   WHERE -- Some conditions --
) x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23628530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档