Oracle 查询每门功课都大于各个功课平均成绩的学生

create table t(student_id number,course varchar2(10),score number);
insert into t values(1,‘语文‘,80);
insert into t values(1,‘数学‘,85);
insert into t values(2,‘语文‘,90);
insert into t values(2,‘数学‘,88);
insert into t values(3,‘语文‘,70);
insert into t values(3,‘数学‘,78);
insert into t values(4,‘语文‘,60);
insert into t values(4,‘数学‘,100);
COMMIT;

SQL>
SQL> SELECT c.student_id,c.course,c.score,c.avg_score FROM
2 (
3 SELECT b.student_id,b.course,b.score,b.avg_score,SUM(b.largerthan) OVER(PARTITION BY b.student_id) cnt_largerthan,COUNT(b.course) OVER(PARTITION BY b.student_id) cnt_cur FROM
4 (
5 SELECT a.student_id,a.course,a.score,a.avg_score,(CASE WHEN a.score > a.avg_score THEN 1 ELSE 0 END ) largerthan FROM
6 (
7 SELECT t.student_id,t.course,t.score,AVG(t.score) OVER(PARTITION BY t.course) avg_score FROM t
8 ) a
9 ) b
10 ) c WHERE cnt_largerthan = cnt_cur
11 ;

STUDENT_ID COURSE SCORE AVG_SCORE
---------- ---------- ---------- ----------
2 语文 90 75
2 数学 88 87.75

SQL>

时间: 2024-11-06 09:11:11

Oracle 查询每门功课都大于各个功课平均成绩的学生的相关文章

InterviewQuestion_SQLServer_Probl_查询每门课都大于80分的学生姓名

题目:用一条SQL语句查询出每门课都大于80分的学生姓名. 最近面试C#开发工程师,碰到上面这个考数据库的题目,自己感觉有点难度,没有思路,现将找到的解决方案整理如下: 文件:SQLQuery1.sql /* 环境:Microsoft SQL Server 2012 工具: Microsoft SQL Server Management Studio 数据库: Interview 数据表: grade 详情: name class score 张三 语文 81 张三 数学 75 李四 语文 76

查询每门课都大于80分的学生姓名

思路就是反过来想就简单了 最后一句这样写就意思明显 SELECT distinct name from (select  name from zzxxz where score<=80) select distinct name from zzxxz where name not in (select distinct name from zzxxz where score<=80)

用一条SQL语句查出每门课都大于80分的学生的姓名

用一条sql语句查询出所有课程都大于80分的学生名单: name cource score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for grade 5 -- ---------------------------- 6 DROP TABL

SQL查询出每门课都大于80 分的学生姓名

Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select distinct name from Course where score<=80) 2.select  name    from Course group by name having min(score)>80

用一条sql语句查询出“每门”课程都大于80分的学生姓名

Name chengji fengshu张三 数学 75张三 语文 81李四 数学 90李四 语文 76王五 数学 81王五 语文 100王五 英语 90 SQL Server: select distinct [Name] from [表] where [Name] not in ( select [Name] from [表] where [fengshu]<=80) 或者 select distinct name from A minus select name from A where

用一条SQL语句 查询出每门课程都大于80分的学生姓名&quot; 的实现方式

建表: 1 create table Score( 2 name varchar(20), 3 course varchar(20), 4 score int) 5 6 go 7 8 insert Score 9 select 'HanMeimei','Chinese',81 union all 10 select 'HanMeimei','Mathematics',75 union all 11 select 'HanMeimei','History',81 union all 12 sele

有n个结构变量,内含学生学号,姓名和3门课程的成绩。要求输出平均成绩的学生的信息

#include<stdio.h> # define N 3 struct Student {int num; char name[20]; float score[3]; float aver; }; int main() { void input(struct Student stu[]); struct Student max(struct Student stu[]); void print(struct Student stu); struct Student stu[N] , *p

[关于SQL]查询成绩都大于80分的学生

1.用一条SQL语句 查询出每门课都大于80分的学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90 CREATE TABLE [dbo].[chengji]( [name] [nvarchar](50) NULL, [kecheng] [nvarchar](50) NULL, [fenshu] [int] NULL ) ON [PRIMARY] GO INSERT [dbo].[chen

Oracle 查询练习

非常经典的一些日常醒脑练习内容!! 如有更高效的写法欢迎赐教! 1 1.已知Oracle的Scott用户中提供了三个测试数据库表,名称分别为dept,emp和salgrade.使用SQL语言完成以下操作 2 1)试用SQL语言完成下列查询(单表查询): 3 a)查询20号部门的所有员工信息: 4 select * from emp e where e.deptno=20;  5 b)查询奖金(COMM)高于工资(SAL)的员工信息: 6 select * from emp where comm>