【问题标题】:Add and get average of two columns for the same record SQL Server为同一记录 SQL Server 添加并获取两列的平均值
【发布时间】:2020-04-24 09:06:30
【问题描述】:

我在 SQL Server 中有一个如下所示的表

imdb_title_id | allgenders_0age_avg_vote | allgenders_18age_avg_vote
---------------------------------------------------------------------
tt0000574       6                         6.2
tt0001892       null                      null

我想得到的是

imdb_title_id | yearsRating
-------------------------
tt0000574       6.1
tt0001892       null

我试过了

SELECT IMDB_Movies.imdb_title_id,
(SELECT Avg(IMDB_Ratings.allgenders_0age_avg_vote + IMDB_Ratings.allgenders_18age_avg_vote)
From IMDB_Movies INNER JOIN IMDB_Ratings
on IMDB_Movies.imdb_title_id = IMDB_Ratings.imdb_title_id
and IMDB_Ratings.allgenders_0age_avg_vote != null and IMDB_Ratings.allgenders_18age_avg_vote != null
group by IMDB_Movies.imdb_title_id) AS yearsRating
From IMDB_Movies, IMDB_Actors, IMDB_Ratings, Actors_Movies

但它在所有 yearsRating 值中都给我 null 所以我应该执行什么查询

【问题讨论】:

  • 这不应该是一个简单的基于表达式的列选择吗?为什么你认为这需要分组或子查询?类似于SELECT imdb_title_id, (allgenders_0age_avg_vote + allgenders_18age_avg_vote)/2 FROM...

标签: sql sql-server database tsql


【解决方案1】:

计算规则没有明确定义。

如果你想要每一行的计算:

select 
    imdb_title_id,
    (allgenders_0age_avg_vote + allgenders_18age_avg_vote) / 2 years_rating
from mytable

但是如果两个值中的任何null,那么结果也是如此。如果您想将null 视为0s:

select 
    imdb_title_id,
    (coalesce(allgenders_0age_avg_vote, 0) + coalesce(allgenders_18age_avg_vote, 0)) / 2 years_rating
from mytable

如果您有多行具有相同的imdb_title_id,并且您希望跨行得到结果:

select 
    imdb_title_id,
    avg(allgenders_0age_avg_vote + allgenders_18age_avg_vote) / 2 years_rating
from mytable
group by imdb_title_id

【讨论】:

    【解决方案2】:

    这将使用您显示的数据进行计算:

    select imdb_title_id, 
           (allgenders_0age_avg_vote + allgenders_18age_avg_vote) / 2 as yearsRating
    from IMDB_Ratings
    

    如果这不是您想要的,那么您应该提供更多详细信息。

    【讨论】:

    • 注意运算符优先级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多