收藏文章 楼主

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

版块:shell   类型:普通   作者:小绿叶技术博客   查看:1135   回复:0   获赞:0   时间:2021-05-07 10:29:57

#!/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 -paaaassss@# -e " use cs ; select * from \`SDU1-20210512\` where a='$i' ") ; echo $ja

                                            # 定义变量ja 为: 登陆数据库 cs 查询 SDU1 表中 name名字的数据

                                            # 表名含有 横线 -  用反引号,并且shell命令要加反斜杠转译 反引号。shell 中反引号是执行命令,此处是要显示字符

ja=`echo "$ja" | grep $i | awk -F" " '{print $2}'| sed 's/ //g'` ; echo $ja ; echo $ja

                                            # 重新给 ja 赋值:打印上一次ja变量的值,grep 过滤名字行,awk 字段处理 -F 指 定分隔符为空格,print 第二列,sed 替换空格为空,打印变量a

    if [ ${#ja} -lt 1 ]                # 判断变量 ja 的长度小于1  就重新赋值变量值为0

          then ja=0

    fi

jb=$(mysql -ucs -paaaassss@# -e " use cs ; select * from \`SDU2-20210512\` where a='$i' ") ; echo $jb

jb=`echo "$jb" | grep $i | awk -F" " '{print $2}' | sed 's/ //g'` ; echo $jb

    if [ ${#jb} -lt 1 ]

          then jb=0

    fi

jc=$(mysql -ucs -paaaassss@# -e " use cs ; select * from \`SDU3-20210512\` where a='$i' ") ; echo $jc

jc=`echo "$jc" | grep $i | awk -F" " '{print $2}' | sed 's/ //g'` ; echo $jc

    if [ ${#jc} -lt 1 ]

          then jc=0

    fi

echo "$i  $[$ja+$jb+$jc]   $ja.$jb.$jc  "  >> jisuan.txt  ; echo "$i  $[$ja+$jb+$jc]   $ja.$jb.$jc  "

echo "----------------------------------------------------------------------------------------------------"

   done

   

   

 SELECT name,zong,guocheng FROM jisuan ORDER BY CONVERT(zong,SIGNED) DESC limit 50

                                                                         # 数据库查询统计表后:进行指定zong列排序;

                                                                         # convert 将zong 列转换为int类型,desc 倒叙排列

                                                                         # limit 50 显示前50行

# CONVERT(zong,UNSIGNED)

   

   

   

   

   

   

   

   

   

   #################### 其他数据库参考资料

   

   #数据库排序前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 将时间列进行倒序排列








提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

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

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息