1

私は2つのテーブル、人と映画を持っています

person テーブルには ID と性別があり、Movie テーブルには ID、movie_type、および movie_attended があります。enderID と movie_attended は null にすることができます。

3 つの列を返すクエリを作成したいと思います: 性別、movie_attended (ただし、ロマンス映画である必要があります)、およびその性別と movie_attended を持つ人の数です。

今、私は持っています

select person.gender, movie.movie_attended, count(person.gender)
from person left join movie
on person.ID = movie.ID
where movie.movie_type = "romance"
order by person.gender DESC

残念ながら、これは 1 行の情報しか提供しません。count(person.gender) を削除すると、行が多すぎます。選択できるロマンス映画が 3 つしかないとしましょう。最初の行を「Male - The Notebook - 12」と読みたいです。2 行目: Male - Casablanca - 8. 3 行目: Male - Romeo & Juliet - 2. 4 行目: Male - Null - 2

次に、女性からやり直します

ありがとうございました

4

2 に答える 2

0
select gender, count(person.gender), movie.movie_attended
from person left join movie
on person.movie_id = movie.movie_id # or whatever it is called.
where movie.movie_type = "romance"
group by person.gender
于 2012-10-17T03:57:29.507 に答える
0

集計関数を使用するときに常に必要な「group by」ステートメントがないため、そのクエリを実行できたことに驚いています。「group by」ステートメントには、集計関数を除いて、「select」ステートメントと同じフィールドが含まれている必要があります。

select person.gender, movie.movie_attended, count(person.gender)
from person left join movie
on person.ID = movie.ID
where movie.movie_type = "romance"
group by person.gender, movie.movie_attended
order by count (person.gender) DESC

あなたが提供したデータは、クエリが性別ではなく結果の数によって並べ替えられていることを示唆しているため、「順序」ステートメントを変更しました。

person.id が movie.id と等しくなければならないのは奇妙に思えます。データベース構造に関しては、人物のテーブル、映画のテーブル、および people.id と movie.id で構築された結合テーブルを持つ方がより実用的と思われます。このテーブルには、どの人がどの映画を見たかのリストが格納されます。

于 2012-10-17T04:04:37.443 に答える