前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 统计三张班级学生各科目成绩表数据求和总分数并排名前50名-shell脚本

shell 统计三张班级学生各科目成绩表数据求和总分数并排名前50名-shell脚本

原创
作者头像
eisc
修改2021-05-08 10:20:01
1.3K0
修改2021-05-08 10:20:01
举报
代码语言:javascript
复制
#!/bin/bash
cat `ls | grep SDU` | awk -F" " '{print $1}' |sort | uniq -c | awk -F" " '{print $2}' > name.txt
                                          # 由于三张表的名字是乱的,先赛选出所有名字存入name.txt 文件
                                          # sort 分组,uniq -c 分组计算个数
cat `ls | grep SDU` | awk -F" " '{print $1 " " $2}' > 1.txt
                                          # 将所有数据按照格式存入新文件
a=(
   `cat name.txt`
)
                                           # 定义数组变量 a 为: 查看文件中的所有名字

echo ${a[*]}                         # 打印数组 a 所有元素:所有名字
for i in ${a[*]}                      # 循环变量 i 为数组a中的所有元素
   do                                    # 开始循环
ja=`mysql -ucs -pcs -e " use cs ; select * from SDU1 where SDU1.name='$i' "`
                                            # 定义变量ja 为: 登陆数据库 cs 查询 SDU1 表中 name名字的数据

ja=`echo "$ja" | grep $i | awk -F" " '{print $2}'| sed 's/ //g'` ; echo $ja
                                            # 重新给 ja 赋值:打印上一次ja变量的值,grep 过滤名字行,awk 字段处理 -F 指定分隔符为空格,print 第二列,sed 替换空格为空,打印变量a
    if [ ${#ja} -lt 1 ]                # 判断变量 ja 的长度小于1  就重新赋值变量值为0
          then ja=0
    fi
jb=`mysql -ucs -pcs -e " use cs ; select * from SDU2 where SDU2.name='$i' "`
jb=`echo "$jb" | grep $i | awk -F" " '{print $2}' | sed 's/ //g'`
    if [ ${#jb} -lt 1 ]
          then jb=0
    fi
jc=`mysql -ucs -pcs -e " use cs ; select * from SDU3 where SDU3.name='$i' "`
jc=`echo "$jc" | grep $i | awk -F" " '{print $2}' | sed 's/ //g'`
    if [ ${#jc} -lt 1 ]
          then jc=0
    fi
echo "$i  $[$ja+$jb+$jc]   $ja.$jb.$jc  "  >> jisuan.txt
echo "----------------------------------------------------------------------------------------------------"
   done
   
   
 SELECT name,zong,guocheng FROM jisuan ORDER BY CONVERT(zong,SIGNED) DESC limit 50
                                                                         # 数据库查询统计表后:进行指定zong列排序;
                                                                         # convert 将zong 列转换为int类型,desc 倒叙排列
                                                                         # limit 50 显示前50行
   
   
   
   
   
   
   
   
   
   #################### 其他数据库参考资料
   
   #数据库排序前50名
   
   select top 1000 * from Chay_Temp A

where A.field03 between '2019-05-27' and '2019-05-28'

order by convert(int,field02) desc

 

--top1000* 显示这个表的所有内容后筛选前1000行,A是表别名,方便选择字段

--between and 和(and)什么之间(between	[bɪˈtwiːn]	之间)

--order by	[ˈɔːdə(r)] 以......排序

--convert(int,field02)将字符串转为(	convert	[kənˈvɜːt ]	转换)int类型进行倒序(大到小)排序

--desc	倒序;asc	正序se

--order by A.field03 desc 将时间列进行倒序排列







原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档