EXCEL中按班级提取前各科的前三名、后三名的成绩及姓名?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL中按班级提取前各科的前三名、后三名的成绩及姓名?相关的知识,希望对你有一定的参考价值。

A列是学号 B列是姓名 C列是班级 D列语文成绩 E列数学成绩 F列英语成绩 G列是总分

没有见你的明细表,设计了一个思路:

1、在成绩列表后再加一个姓名,内容复制前列即可(如下图);

2、再设计一统计表,每班前3名,各科成绩前3名,用函数 large(范围, 第1名),large(范围, 第2名),large(范围, 第3名)得到,当成绩取得了,用成绩反找姓名(最后一列姓名),公式 vlookup( 成绩,范围,取值,0 ), 如下图:

希望对你有用,再交流。ok

疏忽了一点,将后三名没有考虑进来,用 函数 small( ),即可解决,方法同上,SMAll(范围,第n个小值)。

参考技术A

统计出来数据是应该放在什么地方,班级的目录又在哪一个列呢?

如上图,现以语文成绩为例,按下面的一步一步操作吧

1、K2单元格输入公式:

=INDEX($A$2:$A$25,MAX(IF(LARGE($D$2:$D$25-ROW($1:$24)%%,ROW(A1))=$D$2:$D$25-ROW($1:$24)%%,ROW($1:$24),0)))

2、L2单元格输入公式:

=INDEX($B$2:$B$25,MAX(IF(LARGE($D$2:$D$25-ROW($1:$24)%%,ROW(A1))=$D$2:$D$25-ROW($1:$24)%%,ROW($1:$24),0)))

3、在M2单元格输入公式:

=INDEX($D$2:$D$25,MAX(IF(LARGE($D$2:$D$25-ROW($1:$24)%%,ROW(A1))=$D$2:$D$25-ROW($1:$24)%%,ROW($1:$24),0)))

4、在K6单元格输入公式:

=INDEX($A$2:$A$25,MIN(IF(SMALL($D$2:$D$25+ROW($1:$24)%%,ROW(A1))=$D$2:$D$25+ROW($1:$24)%%,ROW($1:$24),4^8)))

5、在L6单元格输入公式:

=INDEX($B$2:$B$25,MIN(IF(SMALL($D$2:$D$25+ROW($1:$24)%%,ROW(A1))=$D$2:$D$25+ROW($1:$24)%%,ROW($1:$24),4^8)))

6、在M6单元格输入公式:

=INDEX($D$2:$D$25,MIN(IF(SMALL($D$2:$D$25+ROW($1:$24)%%,ROW(A1))=$D$2:$D$25+ROW($1:$24)%%,ROW($1:$24),4^8)))

以上都是数组公式,在输入或者粘贴公式时必须同时按CTRL+SHIFT+ENTER这3个键结束,否则公式无效……

复制并下拉,即可得到前3和后3的名单了,自己去研究吧……

参考技术B 把问题作为内容(邮件主题一定要包含“excel”,本人以此为依据辨别非垃圾邮件,以免误删),excel样表文件(把现状和目标效果表示出来)作为附件发到yqch134@163.com帮你看下

Sql取出各科分数前三名的学生,Sql各科成绩前三的学生

 

Sql取出各科分数前三名的学生,Sql各科成绩前三的学生

 

 

================================

©Copyright 蕃薯耀 2021-06-09

https://www.cnblogs.com/fanshuyao/

 

一、取出各科成绩前三的学生

#取出各科成绩前三的学生

CREATE TABLE stu_score(

    id INT PRIMARY KEY AUTO_INCREMENT,
    stu_id INT,
    stu_name VARCHAR(50),
    clazz VARCHAR(20),
    score DOUBLE,
    remark VARCHAR(50)
);


INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, \'小赵\', \'语文\', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, \'小赵\', \'数学\', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, \'小赵\', \'英语\', 90);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (1, \'小赵\', \'化学\', 90);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, \'小钱\', \'语文\', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, \'小钱\', \'数学\', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, \'小钱\', \'英语\', 98);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (2, \'小钱\', \'化学\', 92);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, \'小孙\', \'语文\', 70);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, \'小孙\', \'数学\', 78);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, \'小孙\', \'英语\', 96);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (3, \'小孙\', \'化学\', 95);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, \'小李\', \'语文\', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, \'小李\', \'数学\', 98);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, \'小李\', \'英语\', 88);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (4, \'小李\', \'化学\', 98);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, \'小王\', \'语文\', 90);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, \'小王\', \'数学\', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, \'小王\', \'英语\', 85);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (5, \'小王\', \'化学\', 78);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, \'小陈\', \'语文\', 87);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, \'小陈\', \'数学\', 97);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, \'小陈\', \'英语\', 84);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (6, \'小陈\', \'化学\', 80);

INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, \'小朱\', \'语文\', 80);
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, \'小朱\', \'数学\', 88);#和小钱88分一样,并列第三
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, \'小朱\', \'英语\', 98);#并列第一
INSERT INTO stu_score(stu_id,stu_name,clazz,score) VALUES (7, \'小朱\', \'化学\', 95);#并列批二


SELECT * FROM stu_score ss ORDER BY ss.`clazz`,ss.`score` DESC;


#取出各科成绩前三的学生
#1、取出一名学生A某个学科的成绩
#2、然后和所有的学生同一个学科的成绩比较
#3、当存在该学科的成绩比学生A的成绩大且总人数不大于3,或者该学科成绩没有大于学生A的,则表示学生A的成绩在前三
#4、然后根据学科、分数(降序)排序取出
SELECT * FROM stu_score ss1 
WHERE (
SELECT COUNT(*) FROM stu_score ss2
WHERE ss2.`clazz`=ss1.`clazz` AND ss2.`score` > ss1.`score`
) < 3
ORDER BY ss1.`clazz`,ss1.`score` DESC;

 

 

最后的查询结果:

    id  stu_id  stu_name  clazz       score  remark  
------  ------  --------  ------     ------  --------
    16       4  小李        化学          98  (NULL)  
    12       3  小孙        化学          95  (NULL)  
    28       7  小朱        化学          95  (NULL)  
    14       4  小李        数学          98  (NULL)  
    22       6  小陈        数学          97  (NULL)  
     6       2  小钱        数学          88  (NULL)  
    26       7  小朱        数学          88  (NULL)  
     7       2  小钱        英语          98  (NULL)  
    27       7  小朱        英语          98  (NULL)  
    11       3  小孙        英语          96  (NULL)  
    17       5  小王        语文          90  (NULL)  
     5       2  小钱        语文          88  (NULL)  
    21       6  小陈        语文          87  (NULL)  

 截图:

 

 

二、取出各科成绩都不小于85分的学生

#取出各科成绩都不小于85分的学生
#如果一个学生所有学科的分数中,最小的都>=85,则表示该学生每科成绩都不小于85
SELECT stu_name FROM stu_score  GROUP BY stu_name HAVING MIN(score) >=85;

 

查询结果:

stu_name  
----------
小李    
小钱  

 

 

(时间宝贵,分享不易,捐赠回馈,^_^)

 

================================

©Copyright 蕃薯耀 2021-06-09

https://www.cnblogs.com/fanshuyao/

 

以上是关于EXCEL中按班级提取前各科的前三名、后三名的成绩及姓名?的主要内容,如果未能解决你的问题,请参考以下文章

sql语句查询成绩表各科前三名

Mysql 单表查询各班级总分前三名

Spark-Core(要求取到每个班级的成绩排行的的前三名)

Sql取出各科分数前三名的学生,Sql各科成绩前三的学生

查询各科成绩前三名的记录

mysql版 查询各科成绩前三名的记录:(不考虑成绩并列情况)