Добавить и получить среднее из двух столбцов для одной записи SQL Сервер - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть таблица в SQL Сервер, который выглядит следующим образом

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

но это дает мне нулевое значение во всех значениях yearRating, поэтому какой запрос я должен выполнить

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Правила для вычислений четко не определены.

Если вы хотите вычисления для каждой строки:

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

Но тогда, если любое из двух значений равно null, так будет и результат. Если вы хотите рассмотреть null как 0 s:

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
0 голосов
/ 24 апреля 2020

Это вычисление выполняется с данными, которые вы показали:

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

Если это не то, что вам нужно, вам следует предоставить более подробную информацию.

...