SQL没想出来

li_zero 2003-09-13 01:02:01
table 学生家长登记表:
标识 班级 学生名 家长名 家长收入
1 1 张三 张勇国 2000
2 1 张三 李绣莲 900
3 2 李四 李永进 3000
4 2 王五 王大力 800
5 ……

这样一个表,标识唯一,班级有重复,学生有可能有重复,因为有的只登记了一个家长,有的登记了两个以上。
现在要列出已经登记了的每个学生的家长中,只取收入最大的一个,不是所有的最大,而是对每个学生的来说自己的家长谁收入最大。比如张三,张勇国最大,而只有一个家长的就是这个家长了。
列出的结果是:
标识 班级 学生名 家长名 家长收入
1 1 张三 张勇国 2000
3 2 李四 李永进 3000
4 2 王五 王大力 800
5 ……

...全文
25 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
li_zero 2003-09-15
  • 打赏
  • 举报
回复
谢谢大家支持。

学生名那个字段本来是学生编号的,我是为了说明方便写成学生姓名的。我的方法是:

Select tblB.*,tblA.标识,tblA.班级,tblA.家长名 From (SELECT 学生名, MAX(家长收入) AS 家长收入 FROM 学生家长登记表
GROUP BY 学生姓名) tblB
Left Outer Join 学生家长登记表 tblA
On tblB.学生名=tblA.学生名 and tblB.家长收入=tablA.家长收入
chenlishu413 2003-09-13
  • 打赏
  • 举报
回复
aa代表表名,sr代表收入,
chenlishu413 2003-09-13
  • 打赏
  • 举报
回复
正確的答案來了.給分吧.
select a.* from aa a inner join
(
select class,student,max(sr) as sr from aa group by class,student
) b on a.class=b.class and a.student=b.student and a.sr=b.sr order by id
yujohny 2003-09-13
  • 打赏
  • 举报
回复
我想楼主的要求是这样的
Select a.* from 学生家长登记表 a
inner join
(select 学生名,max(家长收入) as 家长收入 from 学生家长登记表 group by 学生名 ) b
on a.学生名 = b.学生名 and a.家长收入= b.家长收入
老宛 2003-09-13
  • 打赏
  • 举报
回复
select * from 学生家长登记表 a where a.标识 in (select top 1 标识 from 学生家长登记表 b where a.学生名=b.学生名 order by 家长收入 desc)
order by a.标识
CCEO 2003-09-13
  • 打赏
  • 举报
回复
注意 家长收入 有相同的情况,所以用top 1保险
txlicenhe 2003-09-13
  • 打赏
  • 举报
回复
Select a.* from table a
join
(Select 班级,学生名,max(家长收入) as 家长收入 group by 班级,学生名 ) b
on a.班级 = b.班级 and a.学生名 = b.学生名 and a.家长收入= b.家长收入
txlicenhe 2003-09-13
  • 打赏
  • 举报
回复
Select a.* from a
join
(Select 班级,学生名,max(家长收入) as 家长收入 group by 班级,学生名 ) b
on a.班级 = b.班级 and a.学生名 = b.学生名 and a.家长收入= b.家长收入
P1mm 2003-09-13
  • 打赏
  • 举报
回复
一楼看错了
P1mm 2003-09-13
  • 打赏
  • 举报
回复
select * from tablename a
where 标识=(select top 1 标识 from tablename where 学生名=a.学生名 order by 家长收入 desc)
P1mm 2003-09-13
  • 打赏
  • 举报
回复
select * from tablename a
where 标识=(select min(标识) from tablename where 学生名=a.学生名)
happy_0325 2003-09-13
  • 打赏
  • 举报
回复
create table student( id int identity(1,1),class int ,sname varchar(6),pname varchar(6),income dec(12,2))
insert into student(class,sname,pname,income) values(1,'张三','张勇国',2000)
insert into student(class,sname,pname,income) values(1 ,'张三','李绣莲',900)
insert into student(class,sname,pname,income) values(2,' 李四','李永进',3000)
insert into student(class,sname,pname,income) values( 2,'王五','王大力', 800)
select id,a.class,a.sname ,pname,a.income from student a,(select class,sname,max(income ) income
from student
group by class,sname) b
where a.class=b.class and a.sname=b.sname and a.income =b.income
order by id
keekeep 2003-09-13
  • 打赏
  • 举报
回复
这个表结构似乎不太好啊!如果一个班内有重名的学生该如何区分呢???如:

标识 班级 学生名 家长名 家长收入
1 1 张三 张勇国 2000
2 1 张三 李绣莲 900
3 2 李四 李永进 3000
4 2 王五 王大力 800
5 1 张三 张 凯 1500
6 1 张三 杜小月 800
7 ……
你如何区分两个学生张三的家长??
happy_0325 2003-09-13
  • 打赏
  • 举报
回复
学生没有重名吗?若有你怎么标识的?
happy_0325 2003-09-13
  • 打赏
  • 举报
回复
大力已是家长了,很快呀。
:)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧