已經在這個問題上工作了幾個小時,已經接近但仍然無法獲得我想要的結果。這裏是以下問題:使用連接和內部選擇更新sqlite數據庫
For all movies that have an average rating of 4 stars or higher, add 25 to the release year. (Update the existing Rows; don't insert new Rows.) .
此查詢所需的表是我已經張貼在這裏,在How to get results of this particular "query"另一個問題。表名是「電影」和「評級」。如果有幫助,你可以看到一些sql代碼。
我解決這個問題的第一步是(顯然)尋找平均評分爲4星或更高的電影。我這樣做,用下面的查詢:
SELECT movie.mid, aveMovieRating
FROM movie JOIN(
SELECT DISTINCT(rating.mid),
COUNT(mid) AS "Number of movies",
SUM(stars) AS "Total no# of stars",
(SUM(stars)*1.0/COUNT(mid)) AS aveMovieRating
FROM rating
GROUP BY mid
) AS aveRating
ON movie.mid = aveRating.mid
WHERE aveMovieRating >= 4
然後我來到了棘手的部分 - 試圖改變發行年份,按要求的問題...這是我想出了嘗試,查詢:
UPDATE movie
SET year = (year + 25)
WHERE movie.mid IN(
SELECT movie.mid, aveMovieRating
FROM movie JOIN(
SELECT DISTINCT(rating.mid),
COUNT(mid) AS "Number of movies",
SUM(stars) AS "Total no# of stars",
(SUM(stars)*1.0/COUNT(mid)) AS aveMovieRating
FROM rating
GROUP BY mid
) AS aveRating
ON movie.mid = aveRating.mid
WHERE aveMovieRating >= 4)
執行上面的查詢生成以下SQL錯誤的SQLite:
Error: only a single result allowed for a SELECT that is part of an expression
這是我在「複雜」的問題,第一次嘗試沒有得到外界的幫助,b這個錯誤把我拋下了。如果有人能夠幫助我改變上述查詢,並給出關於這類問題的一些指示,那就太棒了:)。
輝煌答案:)。這真的把我的代碼截斷了一些,我忘了「HAVING」函數... – Rob 2012-03-23 04:05:53