首页 > 试题广场 >

考试分数(二)

[编程题]考试分数(二)
  • 热度指数:98889 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

牛客每次考试完,都会有一个成绩表(grade),如下:

id job score
1 C++ 11001
2 C++
10000
3 C++
9000
4 Java 12000
5 Java
13000
6 JS 12000
7 JS
11000
8 JS
9999
9 Java 12500

第1行表示用户id为1的用户选择了C++岗位并且考了11001分

。。。

第8行表示用户id为8的用户选择了前端岗位并且考了9999分

请你写一个sql语句查询用户分数大于其所在工作(job)分数的平均分的所有grade的属性,并且以id的升序排序,如下:

id job score
1 C++ 11001
5 Java 13000
6 JS 12000
7 JS 11000

(注意: sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5,sqlite四舍五入的函数为round)

示例1

输入

drop table if exists grade;
CREATE TABLE  grade(
`id` int(4) NOT NULL,
`job` varchar(32) NOT NULL,
`score` int(10) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO grade VALUES
(1,'C++',11001),
(2,'C++',10000),
(3,'C++',9000),
(4,'Java',12000),
(5,'Java',13000),
(6,'JS',12000),
(7,'JS',11000),
(8,'JS',9999),
(9,'Java',12500);

输出

1|C++|11001
5|Java|13000
6|JS|12000
7|JS|11000
头像 早起的虫儿e
发表于 2021-04-17 20:40:35
问题描述:请你写一个sql语句查询用户分数大于其所在工作(job)分数的平均分的所有grade的属性,并且以id的升序排序方案1:内连接第一步:分组求算部门的平均分 SELECT job,AVG(score) FROM grade GROUP BY job第二步:第一步作为临时表t联结grade,w 展开全文
头像 超超i7宝
发表于 2020-11-25 00:48:11
考得是关于创建表单进行比较的知识点,创建的表单必须保证job相同 才能保证能够进行比较 题解如下:SELECT id, job, scoreFROM grade aWHERE score> (SELECT ROUND(AVG(score),3) FROM grade 展开全文
头像 罗汉果和捆鸡
发表于 2020-10-02 16:25:03
1、求解平均分 select b.job,avg(b.score) as pp from grade b group by b.job 2、查找所有的id,job,以及分数 select a.id ,a.job,a.score from grade a 3、左连接+筛选(高于平均值) s 展开全文
头像 Dateron
发表于 2021-04-14 15:30:23
运用窗口函数,先按 job 分组增加一列各课程平均分,再将整个表做为 from 表,where score > avg(score) 就可以select * from(select *,avg(score) over(partition by job) as avg_score from gr 展开全文
头像 SunburstRun
发表于 2020-09-21 10:18:42
通过考试分数(一) https://blog.nowcoder.net/n/c3455ba1ab0e4f118f0c890e9936d7e7 知道,每个岗位的平均分sql代码如下: (select job,round(sum(score)*1.0/count(id) 展开全文
头像 努力做好鸭!
发表于 2022-03-17 18:29:25
第一种解法(关联子查询+查询过程解析) 先上sql,再分析查询过程 select * from grade g where score >( select avg(score) from grade where job = g.job group by job ) order by id 展开全文
头像 qstalking
发表于 2021-01-26 14:02:05
#整体思路:建一个中间表,包含要查询的所有字段以及需要比较的平均值。然后要什么取什么。 select t1.id         ,t1.job       展开全文
头像 jiang_dr
发表于 2021-11-09 10:16:02
思路:聚合函数和表连接的使用 方法一:利用 score > avg(score),因为where条件中不能使用聚合函数,所以我们在where条件中直接写查询,查询出avg(score) 完整代码: select * from grade where score > (select av 展开全文
头像 王BiangBiang她爸
发表于 2021-01-13 17:53:06
首先根据题目要求,查询用户分数大于该岗位平均分数的数据,这一点很重要,因此我们需要先以岗位类型分组,然后求该类型岗位的平均分数,这里需要用到平均数函数AVG,并且为了跟准确,我们保留小数点后三位,会用到函数roundselect job, round(avg(score), 3) as score1 展开全文
头像 想到就去做
发表于 2021-08-26 14:43:50
select g1.id, g1.job, g1.scorefrom grade g1 join ( select job,round(avg(score),3) avg from grade group by job) g2 on g1.job = g2.jobwhere 展开全文