Titanic数据集之MySQL练习

2017-01-14 19:45:22来源:CSDN作者:CherDW人点击

  • 这里要感谢师兄一听到我面试考了SQL但是并不熟练之后,建议我直接用实际数据集进行练手,这样会尽快学习到更多,然后立马给我提出了Titanic数据集的一些需求然后发给他看,给力有木有。现在分享自己练习过程中的代码以及遇到的一些问题。

 

  • 泰坦尼克取数需求

1、首先查看整张表(select *)

2、统计数据条数

3、统计男/女条数

4、查看是否有重复行

5、分别统计年龄大于25岁的男/女条数

6、统计不同乘客等级(Pclass)的平均票价

7、统计登船港口(Embarked)为空的条数

8、查看不同年龄的人数

9、统计各乘客等级(Pclass)的获救和不获救的人数

10、统计年龄在20到30岁内,性别为男,获救的人数

11、查看按性别降序排列的前20条数据

12、查看年龄为10,15,25岁的所有数据(不能用or)

13、获得ID,父母与小孩个数,堂兄妹个数。父母与小孩个数与堂兄妹个数的差值(命名为diffz)的情况

14、创建一张表:表内数据为不同性别,不同乘客等级的年龄、票价平均值(要求年龄那一列必须转换为int)

15、查看那张表每个字段都是什么数据类型(int double string)

16、将任务9里创建的表与原始表合并(join),注意键

17、删除上面任务9的那张表

 

  • MySQL代码

	create database titanic;	use titanic;    -- 每次重启sql需要先选则要操作的数据库		create table titanic_train	(		PassengerId int(3),		Survived char(1),		Pclass char(1),		Name blob,		Sex char(6),		Age int(2),		SibSp char(1),		Parch int(1),		Ticket varchar(30),		Fare dec(10,4),		Cabin char(5),		Embarked char(1)	);		-- sql导入csv文件	load data local infile 'C://Users//86349//Desktop//train.csv' 	into table titanic_train  -- 这里导入csv会出错,具体解决方法见"问题解决"	fields terminated by','optionally enclosed by '"' escaped by '"'	-- 字段之间以逗号分隔,字符串以半角双引号包围,字符串本身的双引号用两个双引号表示	lines terminated by'/r/n'   -- 数据行之间以/r/n分隔		desc titanic_train;  -- describe,可以看到每个字段的类型,用于检查	select * from titanic_train;	select count(*) from titanic_train;	select Sex,count(*) from titanic_train group by Sex;	select count(distinct PassengerId) from titanic_train;	select Sex,count(*) from titanic_train where Age>25 group by Sex;	select Pclass,avg(Fare) from titanic_train group by Pclass;	select count(*) from titanic_train where Embarked='';	select Age,count(*) from titanic_train group by Age;	select Pclass,Survived,count(*) from titanic_train group by Pclass,Survived;	select count(*) from titanic_train where (Age>20 and Age<30) and Sex='male' and Survived=1;	select * from titanic_train order by Sex desc limit 0,20; -- limit用法,从0开始倒序20个	select * from titanic_train where Age in(10,15,25);	select PassengerId,Parch,SibSp,(Parch-SibSp) as diffz from titanic_train;	-- 注意这一句的AS用法		create table exp	(		sex char(6),		pclass char(1),		avgage int(2),		avgfare dec(10,4)	);	insert into exp select Sex,Pclass,avg(Age),avg(Fare) from titanic_train group by Sex,Pclass;	describe exp;	select * from exp limit 10;		create table tablejoin	(		pclass char(1),		Survived char(1),		peoplecount int(3)	);	insert into tablejoin select Pclass,Survived,count(*) from titanic_train group by Pclass,Survived;	select * from tablejoin ;	select * from titanic_train left join tablejoin on titanic_train.Pclass=tablejoin.pclass and titanic_train.Survived=tablejoin.Survived;	drop table tablejoin;		-- 这两句从一个表格创建新的表格的写法,不用声明每一个字段类型	create table exp as		select Sex,			  Pclass,			  avg(Age),			  avg(Fare)		from   titanic_train	  group by  Sex,Pclass;


  • 问题解决:
  1. Error:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

如果要解决这个问题,可以通过下面两种方式:

  1. Move your file to the directory specified by secure-file-priv.
  2. Disable secure-file-priv. This must be removed from startup and cannot be modified dynamically. To do this check your MySQL start up parameters (depending on platform) and my.ini.
  1. 将你要导入或导出的文件位置指定到你设置的路径里;
  2. 可以修改my.cnf里关于这个选项的配置,然后重启即可。

选择方法b:首先使用"SHOW VARIABLES LIKE "secure_file_priv"查看secure_file_priv的值,通常默认为sql安装路径,因此需要修改其值。

secure_file_prive=null   --限制mysqld 不允许导入导出

secure_file_priv=/tmp/   --限制mysqld的导入导出只能发生在/tmp/目录下

secure_file_priv=' '             -- 不对mysqld的导入导出做限制

修改MySQL的 my.ini 文件来设置secure_file_priv。但是修改后提示拒绝访问,即便是关闭了mysql服务还是拒绝访问。解决办法:右击my.ini文件,属性—>安全—>修改users权限即可

  1. 统计登船港口(Embarked)为空的条数

select count(*) from titanic_train where Embarked is null;

这里统计不出空值数目,原因是在表的最后一列如果为空,直接省略了这一列末尾的逗号,因此可以改为:

select count(*) from titanic_train whereEmbarked='';

  • 注意事项:

SQL语句的格式化写法:



最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台