この質問は数時間働いていますが、近いうちに私が望む結果を得ることはできません。このクエリのために必要なジョインとインナーセレクトを使用した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コードが役立つ場合は、そこにいくつかの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)
は、SQLiteの中に、次のSQLエラーが発生します。
Error: only a single result allowed for a SELECT that is part of an expression
これは外部の助けを得ることなく、「複雑な」質問で私の最初の試み、Bでしたこのエラーは私を捨てました。誰かが上記のクエリを変更するのを手伝って、このタイプの問題についていくつかの指摘をすることができたら、それはすばらしいでしょう:)。
ブリリアント答えを:)。これは実際に私のコードを少し切り詰め、 "HAVING"機能を忘れてしまった... – Rob