1

我有 2 张桌子,人物和电影

person 表有 ID 和性别,Movie 表有 ID、movie_type 和 movie_attended。genderID 和movie_attended 可以为空。

我想创建一个返回 3 列的查询:gender、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

不幸的是,这只给了我一行信息。如果我删除 count(person.gender) 我会得到太多行。假设只有 3 部爱情电影可供选择。我希望我的第一行阅读男 - 笔记本 - 12。第二行:男 - 卡萨布兰卡 - 8。第三行:男 - 罗密欧与朱丽叶 - 2。第四行:男 - 空 - 2

然后从女性重新开始

谢谢

4

2 回答 2

0

我很惊讶您设法运行该查询,因为您缺少使用聚合函数时始终需要的“分组依据”语句。“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

我已经更改了您的“order by”语句,因为您提供的数据表明查询是按结果数量而不是按性别排序的。

person.id 应该等于 movie.id 对我来说似乎很奇怪。在数据库结构上,人表、电影表和people.id和movie.id组成的连接表似乎更实用,其中存储了哪些人看过哪些电影的列表。

于 2012-10-17T04:04:37.443 回答
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 回答