SQL 查询每一列的内容,两个表的连用

不好意思 SQL新人 最近在练习的时候遇到了一个问题

第一个表

movies(mid char(5),title char(64), unknown char(1),action(1), adventure char(1), children char(1))

前面是电影的ID 和名字 后面的是电影的类别, 1、0表示属不属于这几种, 不明、动作、冒险、儿童之类的等等 有很多类别,

问题1:我怎么统计有多少部动作片?多少部冒险片?多少部儿童片?等等

种类太多了,有20来种,我一条一条查感觉不太现实。

这里还有一个表

ratings(uid char(4),mid char(5), rating integer)

这个表里放的是用户给电影的评分(1分到5分)

问题2:如果我想计算每种电影的平均得分,有办法吗?

比如动作片平均3分,爱情片平均4.5分。

第一个问题我想了个方法可以算sum值得到的就是部数,但是还是只能一列一列算,还是很麻烦。

SQL问题的种类太多了,看了一些博客,感觉case之类的应该没法用在我这个问题上吧。希望能有大神给讲解下。

不是大神,第一个问题 应该可以先列转行,再分组求和

允许修改表结构吗,如果你把电影类别设计成一个字段,不同的值代表不同的类型,你这些问题应该都很简单解决了,就是初始数据库设计表的时候有问题

你这个表建得不好,把类别建立一个基础档案,再建立一个电影类别的表,后面统计就好做了

如果表结构是你自己设计的,建议第一个表movies(mid char(5),title char(64),type_id varchar(255)),type_id是类别字段,1不明,2动作,3冒险...,电影属于多个类别的存1,2,3这种。
电影类别也可以单独建个表。
这样第一个SQL语句可以写成:SELECT type_id,count(id) as movies_num FROM movies group by type_id;
图片说明

如果要查询类别列表mysql有find_in_set函数:
select * from movies where find_in_set(2,type_id);

首先,强烈建议修改表结构,这表结构设计得比菜鸟还菜。其次,现在这样的结构你要统计也没啥简便方法,统计有多少部只能select sum(unkown),sum(action) 这样,至于第二个统计,只能一个sql得出一个平均分。可以用存储过程来实现。

你这个表结构存在明显问题,后面要增加类别还要再添加字段,建议将类别用一个字段体现,这样就很好解决了!