以下のような3つのテーブルがあります。
Movies
Users
Ratings
create文です、データはcsvファイルからとってきたものです。
CREATE DATABASE IF NOT EXISTS MovieDB; USE MovieDB; DROP TABLE IF EXISTS Ratings; DROP TABLE IF EXISTS Users; DROP TABLE IF EXISTS Movies; CREATE TABLE Users ( UserID INTEGER PRIMARY KEY, Age INTEGER, Gender CHAR(1), Occupation VARCHAR(20), ZipCode CHAR(5)); CREATE TABLE Movies ( MovieID INTEGER PRIMARY KEY, Title VARCHAR(120), ReleaseDate DATE, UNKNOWN ENUM('T','F'), Action ENUM('T','F'), Adventure ENUM('T','F'), Animation ENUM('T','F'), Children ENUM('T','F'), Comedy ENUM('T','F'), Crime ENUM('T','F'), Documentary ENUM('T','F'), Drama ENUM('T','F'), Fantasy ENUM('T','F'), FilmNoir ENUM('T','F'), Horror ENUM('T','F'), Musical ENUM('T','F'), Mystery ENUM('T','F'), Romance ENUM('T','F'), SciFi ENUM('T','F'), Thriller ENUM('T','F'), War ENUM('T','F'), Western ENUM('T','F')); CREATE TABLE Ratings ( UserID INTEGER, MovieID INTEGER, Rating INTEGER, TS TIMESTAMP, PRIMARY KEY (UserID, MovieID), FOREIGN KEY (UserID) REFERENCES Users(UserID), FOREIGN KEY (MovieID) REFERENCES Movies(MovieID) );
次の条件のセレクト文を考えているのですが行き詰っています。
1つ目
50 歳以下のユーザーによる評価が1件もない映画のタイトル。
映画ごとに50歳以下のユーザーの評価をカウントし、それが0かどうかで判断するというように考えましたが、エラーがでます。
select title from movies,users,ratings where count(movies.movieid = ratings.movieid and ratings.userid = users.userid and age < 50) = 0;
ERROR 1111 (HY000): Invalid use of group function
2つ目
400人以上のユーザーから評価をつけられている映画のタイトルと平均評価を平均評価の高い順に表示。
UserIDをカウントして400以上であるかどうかで考えましたが、エラーが出ます。
select title avg(ratings) as avg_r from movies,users,ratings where movies.movieid = ratings.movieid and ratings.userid = users.userid and count(users.userid) >= 400 order by avg_r desc;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ratings) as avg_r from movies,users,ratings where movies.movieid = ratings.movi' at line 1
画像ではなくSQLのサンプルはcreate table/insert形式で例示ください
データの中身はcsvファイルからとってきたものです。
CREATE DATABASE IF NOT EXISTS MovieDB;
USE MovieDB;
DROP TABLE IF EXISTS Ratings;
DROP TABLE IF EXISTS Users;
DROP TABLE IF EXISTS Movies;
CREATE TABLE Users (
UserID INTEGER PRIMARY KEY,
Age INTEGER,
Gender CHAR(1),
Occupation VARCHAR(20),
ZipCode CHAR(5));
CREATE TABLE Movies (
MovieID INTEGER PRIMARY KEY,
Title VARCHAR(120),
ReleaseDate DATE,
UNKNOWN ENUM('T','F'),
Action ENUM('T','F'),
Adventure ENUM('T','F'),
Animation ENUM('T','F'),
Children ENUM('T','F'),
Comedy ENUM('T','F'),
Crime ENUM('T','F'),
Documentary ENUM('T','F'),
Drama ENUM('T','F'),
Fantasy ENUM('T','F'),
FilmNoir ENUM('T','F'),
Horror ENUM('T','F'),
Musical ENUM('T','F'),
Mystery ENUM('T','F'),
Romance ENUM('T','F'),
SciFi ENUM('T','F'),
Thriller ENUM('T','F'),
War ENUM('T','F'),
Western ENUM('T','F'));
CREATE TABLE Ratings (
UserID INTEGER,
MovieID INTEGER,
Rating INTEGER,
TS TIMESTAMP,
PRIMARY KEY (UserID, MovieID),
FOREIGN KEY (UserID) REFERENCES Users(UserID),
FOREIGN KEY (MovieID) REFERENCES Movies(MovieID)
);
ソースはマークダウンして本文に追記してください