Sql 看起来很容易,但由于某种原因,我看不出有多少诡计。我仍然得到0.0的结果。最初,在练习中建议“确保计算每部电影的平均评分,然后计算1980年之前和之后电影的平均评分。不要只计算1980年之前和之后的总体平均评分。”@ThorstenKettener我收到以
Sql 看起来很容易,但由于某种原因,我看不出有多少诡计。我仍然得到0.0的结果。最初,在练习中建议“确保计算每部电影的平均评分,然后计算1980年之前和之后电影的平均评分。不要只计算1980年之前和之后的总体平均评分。”@ThorstenKettener我收到以,sql,sqlite,Sql,Sqlite,看起来很容易,但由于某种原因,我看不出有多少诡计。我仍然得到0.0的结果。最初,在练习中建议“确保计算每部电影的平均评分,然后计算1980年之前和之后电影的平均评分。不要只计算1980年之前和之后的总体平均评分。”@ThorstenKettener我收到以下错误:查询无法执行:near”(':syntax errorOops,我错过了FROM关键字。添加了它。@ThrostenKettner恭喜!!成功完成了!我得到了正确的结果!非常感谢!这对我来说很棘手!我应该更多地学习如何使用别名,比如你对
看起来很容易,但由于某种原因,我看不出有多少诡计。我仍然得到0.0的结果。最初,在练习中建议“确保计算每部电影的平均评分,然后计算1980年之前和之后电影的平均评分。不要只计算1980年之前和之后的总体平均评分。”@ThorstenKettener我收到以下错误:查询无法执行:near”(':syntax errorOops,我错过了FROM关键字。添加了它。@ThrostenKettner恭喜!!成功完成了!我得到了正确的结果!非常感谢!这对我来说很棘手!我应该更多地学习如何使用别名,比如你对r的定义。@ThrostenKettner为什么需要创建中间列?我没有创建任何东西。这很明显在两个表中都显示电影ID。在原始查询中也使用它。
SELECT AVG(avgB) - AVG(avgA)
FROM(
SELECT AVG(stars) as avgB
FROM Rating
JOIN Movie
ON Rating.mID = Movie.mID
GROUP BY title
HAVING year < 1980
UNION
SELECT AVG(stars) as avgA
FROM Rating
JOIN Movie
ON Rating.mID = Movie.mID
GROUP BY title
HAVING year > 1980
);
SELECT AVG(avgB) - AVG(avgA)
FROM(
SELECT AVG(stars) as avgB
FROM Rating
JOIN Movie
ON Rating.mID = Movie.mID
WHERE Movie.year < 1980
GROUP BY title
UNION
SELECT AVG(stars) as avgA
FROM Rating
JOIN Movie
ON Rating.mID = Movie.mID
WHERE Movie.year >= 1980
GROUP BY title
);
SELECT (AVG(B.Rating_OLD) - AVG(B.Rating_NEW)) AS Rating_Diff
FROM (
SELECT A.title , AVG(A.stars_OLD) AS Rating_OLD ,AVG(A.stars_NEW) AS Rating_NEW
FROM (
SELECT title ,
CASE
WHEN Movie.year < 1980 THEN Rating.stars
ELSE 0
END AS stars_OLD ,
CASE
WHEN Movie.year >= 1980 THEN Rating.stars
ELSE 0
END AS stars_NEW
FROM Rating
JOIN Movie
ON Rating.mID = Movie.mID
) A
GROUP BY A.title
) B
SELECT
(AVG(CASE WHEN year < 1980 THEN stars ELSE 0 END)-
AVG(CASE WHEN year >= 1980 THEN stars ELSE 0 END)) AS averag
FROM Rating
JOIN Movie ON Rating.mID = Movie.mID
SELECT
AVG(avgB) - AVG(avgA)
FROM
(
(
SELECT
AVG(stars) as avgB
FROM
Rating
JOIN
Movie
ON
Rating.mID = Movie.mID
WHERE
year < 1980
) t1
CROSS JOIN
(
SELECT
AVG(stars) as avgA
FROM
Rating
JOIN
Movie
ON
Rating.mID = Movie.mID
WHERE
year < 1980
) t2
);
SELECT (AVG(CASE WHEN m.year < 1980 THEN r.stars END) -
AVG(CASE WHEN m.year >= 1980 THEN r.stars END)
) AS averag
FROM Rating r JOIN
Movie m
ON r.mID = m.mID;
select
avg(r.stars) as total,
avg(case when m.year < 1980 then r.stars end) as pre1980,
avg(case when m.year > 1980 then r.stars end) as post1980,
avg(case when m.year < 1980 then r.stars end) -
avg(case when m.year > 1980 then r.stars end) as diff
from
(
select mid, avg(stars) as stars
from rating
group by mid
) r
join movie m on m.mid = r.mid;