cuiran 2009-01-15 17:44 采纳率: 0%
浏览 206
已采纳

面试中遇到sql,进行查询

在面试中遇到了这样的问题,不知道大家是怎么解决的,是关于sql的。

我是这么写的。

 

在数据库库中建这样一张表

/****** Object:  Table [dbo].[Student]    Script Date: 2009-1-15 16:46:41 ******/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Student]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Student]
GO

/****** Object:  Table [dbo].[Student]    Script Date: 2009-1-15 16:46:41 ******/
CREATE TABLE [dbo].[Student] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [lesson] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [mark] [int] NULL
) ON [PRIMARY]
GO

里面的值:有很多的我只写了部分。

 

id name lesson mark
1 tom English 90
2 lin Math 80
3 john Chinese 70
4 tom Math 87
5 tom Chinese 78
6 lin English 87
7 lin Chinese 88
8 john Math 45
9 john English 55
10 aaa Chinese 56
11 aaa Math 67
12 aaa English 87
13 bbb Chinese 90
14 bbb Math 78
15 bbb English 87
16 ccc Chinese 43
17 ccc Math 50
18 ccc English 56
19 ddd Chinese 98
20 ddd Math 78
21 ddd English 80
22 eee Chinese 87
23 eee Math 77
24 eee English 87

 

 

 

select * from Student

--1.有不及格学科学生名字
select distinct name from Student where mark<60
--2.超出一门学科不及格的学生名字
select distinct name from Student where mark<60

--3.所有学科都不及格
  ---第一种
 select distinct name from Student as s where  name in(select distinct name from Student)  and (select mark from Student where lesson= 'Chinese'  and name=s.name ) <60  and
(select mark from Student where lesson='Math' and name=s.name ) <60  and (select mark from Student where lesson='English' and name=s.name ) <60

--4.Math排名前三包括并列
 
select top 3 name, lesson,mark from Student  where lesson='Math' order by(mark)  desc

--5.总分排名前三(包括并列)
select top 3 name ,sum(mark) as total from Student group by(name) order by(total) desc

--6.列出每一科分数最高者名字及分数
 select name ,l.lesson,l.maxmark  from ( select lesson,  max(mark) as maxmark  from Student group by(lesson)) as l,Student s
where s.mark=l.maxmark and s.lesson=l.lesson

 

  • 写回答

3条回答 默认 最新

  • liumy601 2009-01-16 16:20
    关注

    改成这样是可以的,select name from Student where mark < 60 group by name having count(name) > 1 ,刚才那个我没用mysql试过,这次保证正确。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀