2

これが私のデータベースです:

create table Movie (
mID smallint auto_increment primary key, 
title varchar(30), 
director varchar(20),
year int
)engine innodb;

create table Reviewer (
rID smallint auto_increment primary key, 
name varchar(30)
)engine innodb;

create table Rating (
mID smallint, 
rID smallint, 
stars int, 
ratingDate date,
constraint fk_movie foreign key (mID) references movie(mID),
constraint fk_reviewer foreign key (rID) references reviewer(rID)
)engine innodb;

insert into movie (title,director,year) values ('Lincoln','Steven Spielberg',2012),('An Unexpected Journey','Peter Jackson',2012),('Jurassic Park','Steven Spielberg',1993),('The Godfather','Francis Ford Coppola',1972), ('Fight Club','David Fincher',1999),('War Horse','Steven Spielberg',2011),('Rise of guardians','Peter Ramson',2012),('The Shawshank Redemption','Frank Darabont',1994),('Jaws','Steven Spielberg',1975),('Raging Bull','Martin Scorsese',1980);

insert into reviewer (name) values ('Bill Goodykoontz'),('David Germain'),('Christy Lemire'),('Richard Lawson'),('Marjorie Baumgarten');

insert into rating (mID, rID, stars, ratingDate) values (1,4,3,'2012-04-09'),(3,5,4,'2000-03-05'),(4,2,5,'1900-09-15'),(7,3,5,'2012-08-25'),(6,1,4,'2011-09-11'),(8,5,5,'1995-10-15'),(9,3,3,'1980-02-20');

これが、このすべてのデータが挿入されたSQLFiddleです

「現在データベース内で最も低い(星が最も少ない)評価ごとに、レビュー担当者の名前、映画のタイトル、星の数を返します。」

私のコードは次のとおりです。

SELECT name REVIEWER, title MOVIE, stars FROM rating
INNER JOIN movie
USING(mID)
INNER JOIN reviewer
USING(rID)
GROUP BY stars
HAVING stars = min(stars);

私の出力は

REVIEWER    MOVIE   stars
Christy Lemire      Jaws    3
Bill Goodykoontz    War Horse   4
David Germain       The Godfather   5

理想的な出力

REVIEWER    MOVIE   stars
Christy Lemire  Jaws    3
Richard Lawson  Lincoln 3

誰かが私のコードを親切に訂正してくれました。

4

2 に答える 2

2

あなたはこれを探していませんか:

    SELECT name REVIEWER, title MOVIE, stars FROM rating
INNER JOIN movie    USING(mID)
INNER JOIN reviewer USING(rID)
WHERE stars = 
  (SELECT min(stars) FROM rating);

SQLフィドル

于 2012-12-21T16:29:21.857 に答える
1

WHERE句を使用して、これをフィルタリングできます。

SELECT v.name REVIEWER, 
  m.title MOVIE, 
  r.stars 
FROM movie m
INNER JOIN rating r
  on r.mid = m.mid
INNER JOIN reviewer v
  on r.rid = v.rid
where r.stars = (select min(stars)
                 from rating)

SQL FiddlewithDemoを参照してください

結果を返します:

|       REVIEWER |   MOVIE | STARS |
------------------------------------
| Christy Lemire |    Jaws |     3 |
| Richard Lawson | Lincoln |     3 |
于 2012-12-21T16:30:03.343 に答える