本文编写于 624 天前,最后修改于 548 天前,其中某些信息可能已经过时。

今天总算是考完了,然而刚出考场,就接到了任务,要求对全校863个校内获奖项目进行统计处理,天。。

SQL协同Excel制表统计各学院一二三等奖

需求

现有EXCEL表一张,内含以下字段,和近900条数据

单位 作品名称 作者 指导老师 获奖等级
文学院 《诗经》中的周代宗庙祭祀诗歌研究 xxx xxx 特等奖
文学院 《张协状元》中的三身代词句法语义语用特征研究 xxxx xxx 特等奖
传媒学院 VR技术与公益传播融合发展趋势研究 xxxxxx xxx 特等奖
社会学院 大学生志愿资源效用发挥瓶颈与再造 xxxxx xxx 特等奖
社会学院 基于VR/AR技术的公共图书馆残障群体服务探索 xxx xxx 特等奖

其中获奖等级分别为“特等奖、一等奖、二等奖和三等奖”

要求,统计出各个学院获得特等奖、一等奖、二等奖、三等奖的个数,然后评分排序

想法

首先想到excel自带的分类汇总,但分类汇总只能汇总单一字段,不好搞

又想到了手动筛选数数字,但我是个懒人

所以想到用SQL

解决步骤

新建数据库

直接打开本地集成的Xampp环境,使用傻瓜式的phpmyadmin来进行数据库的新建

然后创建对应字段,字段名选择了varchar格式,长度要长一点,我保守起见会出现长的内容的字段的选了100

在excel内构造sql语句并导入

我没有选择直接从excel导入mysql而是自己手动构造sql语句,这样其实也很方便

利用excel拼接sql语句手动导入数据库

注意单双引号分清楚,使用&进行引用数据的拼接,比如

="insert into table(college,proname,name,teacher,prize) values('"&A2&"','"&B2&"','"&C2&"','"&D2&"','"&E2&"');"

然后拖动填充柄,或者双击右下角,自动填充即可获得对应的863条sql

然后最好导入notepad或者什么编辑软件看一下,是不是每一条语句都是正常的,我这有些行会多出开头结尾的双引号出来,确定无误后用自带的sql工具导入

统计数据

只需要输入

select college,
    count(if(prize="特等奖",true,null)) 特等奖,
    count(if(prize="一等奖",true,null)) 一等奖,
    count(if(prize="二等奖",true,null)) 二等奖,
    count(if(prize="三等奖",true,null)) 三等奖 
from tiaozhanbei 
group by college;

执行就都出来了

再复制到excel里面排一下格式就行,很方便

总结

难点主要是在count()group by

上网查了才知道count函数里面也是可以加条件的,就很好,要不然我可能会这么写,加上where就只能统计某一个奖了

select college,count(prize) from tiaozhanbei where prize = "特等奖" group by college;

group by的话相当于分类字段,要选对,不要选错

参考

  1. sql利用在一条语句中count出不同的条件的值
  2. SQL 查询问题 count 多个字段如何实现