SQL难题:查询所有学科成绩都不及格的和总分排名前三名的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL难题:查询所有学科成绩都不及格的和总分排名前三名的相关的知识,希望对你有一定的参考价值。

1、都不及格:
select
a.name,a.lesson,a.score
from
test
a,
(select
name,count(lesson)
as
cl
from
test
group
by
name)
b,
(select
name,count(lesson)
as
cl
from
test
where
score
<
60
group
by
name)
c
where
a.name=b.name
and
a.name=c.name
and
b.cl=c.cl
2、总分前三:(不太合理,学科不一样,靠得越多,总分越高,业务需求有问题)
select
top
3
name,sum(score)
as
总分
from
test
gropu
by
name
order
by
2
回答者:
shaoshuai_bd
-
经理
五级
10-22
12:36
第二道题,二楼的写法是sql
server的写法,在oracle中是不能执行的,下面是
oracle中的写法
select
*
from
(
select
name,sum(score)
as
z
from
a
group
by
name
order
by
z
desc)
where
rownum<=2
参考技术A 所有学科都不及格的
SELECT
*
FROM
(SELECT
NAME,
COUNT
(*)
a
FROM
TEST
WHERE
score
<
60
GROUP
BY
NAME)
WHERE
a
=
'考试科目数'
从你给出的不完全表内容看,考试科目数为
4
(数学,语文,化学,英语)
总分前三名的
SELECT
*
FROM
(SELECT
NAME,
SUM
(score)
AS
b
FROM
TEST
GROUP
BY
NAME
ORDER
BY
b
DESC)
WHERE
ROWNUM
<=
3
参考技术B 1、都不及格:
select
a.name,a.lesson,a.score
from
test
a,
(select
name,count(lesson)
as
cl
from
test
group
by
name)
b,
(select
name,count(lesson)
as
cl
from
test
where
score
<
60
group
by
name)
c
where
a.name=b.name
and
a.name=c.name
and
b.cl=c.cl
2、总分前三:(不太合理,学科不一样,靠得越多,总分越高,业务需求有问题)
select
top
3
name,sum(score)
as
总分
from
test
gropu
by
name
order
by
2
参考技术C 1
select
*
from
test
where
name
not
in(select
name
from
test
where
score>=60
group
by
name)
子查询

查询成绩中有及格科目的人名
主查询对子查询结果
取反
,即
查询成绩中没有及格科目的人名
2
降序排列取前3位
select
top
3
name,sum(score)
as
总分
from
test
gropu
by
name
order
by
总分
desc
参考技术D 查询应该只能查询出来不及格的
至于要所有不及格的和总分排名前三名的你要进行数据处理吧。。
或者就是你有总分这一个栏位。

用sql语句,查询每个班级成绩排名前三名的学生姓名

1、首先在打开的SQL Server中,假设有两条数据中,包含有【张】,但是这个张一前一后,如下图所示。

2、此时就能利用Select和From语句,查询数据,如下图所示。

3、但是要查找姓名中包含有【张】,那么不能用等号,如下图所示。

4、因此一定要必须使用Like关键字,才能查询SQL的数据。

5、这个时候,如果单对【张】字后加个百分号是不允许的,这样只能查找姓张的数据。

6、如果想要前后都有关键字【张】,那么一定要在前后都加百分号,就能实现模糊查找姓名。

参考技术A 你的数据结构是怎么样的呢?
是否已经计算了总分
假设已经计算了总分
前三名所有记录 列可以自定义 (列出前3名成绩总分 3种主流数据库写法)
sqlserver数据库:
select top 3 from 成绩表 order by 总分 desc
mysql数据库:
select * from 成绩表 order by desc 总分 desc limit 3
oracle数据库:
select * from 成绩表 order by desc 总分 ROWNUM <= 3

如果说没有给出总分
需要先计算总分
select (语文+数学+。。。)as total top 3 from 成绩表 order by total desc
然后其他数据库自己灵活运用你自己所使用的数据库的上述方法追问

在Oracle中,本题是先把班级分组还是先按成绩排序

追答

先分组分组 然后再排序

参考技术B select top 3 * from 成绩 group by 班级 order by 成绩 参考技术C 思路是先分组后按成绩排序

以上是关于SQL难题:查询所有学科成绩都不及格的和总分排名前三名的的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的sql求总分前三名

用sql语句,查询每个班级成绩排名前三名的学生姓名

用sql语句,查询每个班级成绩排名前三名的学生姓名

sql语句的学习

mysql中一张学生表,查询出单科成绩前十名学生的所有信息 和总分成绩前十名学生的所有信息 在线等

asp:查询每个学生的各科成绩,总分,平均分的sql语句