黑马程序员技术交流社区

标题: SQL语句查询最大值 [打印本页]

作者: 吴泉水    时间: 2011-12-14 10:54
标题: SQL语句查询最大值
有这么一组数据,如何用SQL语句查询里的工资最多的人的姓名和年龄还有工资一块显示
aaa        25        6000
bbb        26        4500
ccc        22        3000
lily        28        6800
tom        32        3800
lucy        36        4500
tony        25        4600
作者: 余飞    时间: 2011-12-14 11:05
  1. declare @wage int
  2. begin
  3. select @wage=max(wage) from Employer
  4. select name,age,wage from Emplayer where wage=@wage
  5. end
复制代码

作者: 吴泉水    时间: 2011-12-14 11:07
余飞 发表于 2011-12-14 11:05

就是先定义一个变量让它找出工资的最大值,通过这个变量再去查询是吧,谢谢
作者: 余飞    时间: 2011-12-14 11:32
吴泉水 发表于 2011-12-14 11:07
就是先定义一个变量让它找出工资的最大值,通过这个变量再去查询是吧,谢谢 ...

恩 ,客气{:3_56:}
作者: 朱勋    时间: 2011-12-14 15:01
你可以根据工资进行降序排序,第一条记录就是了
作者: 吴泉水    时间: 2011-12-14 15:02
朱勋 发表于 2011-12-14 15:01
你可以根据工资进行降序排序,第一条记录就是了

我的目的是只显示一条最大值的相关的所有信息
作者: 朱勋    时间: 2011-12-14 15:04
本帖最后由 朱勋 于 2011-12-14 15:08 编辑
朱勋 发表于 2011-12-14 15:01
你可以根据工资进行降序排序,第一条记录就是了


你可以先排序,然后用 SELECT TOP 1 *FROM [Table] ORDER BY  工资ASC 只取出对一条记录。


作者: 何旭    时间: 2011-12-14 17:08
本帖最后由 何旭 于 2011-12-14 17:09 编辑

select * from 表 order by 工资 desc
作者: 张旭    时间: 2011-12-15 00:46
select name,age,max(wages)
from employer  
  

select  name,age,wages
from enployer
order by  wages desc                              
作者: 张大福    时间: 2011-12-20 13:28
本帖最后由 张大福 于 2011-12-20 13:38 编辑

select * from 表名
where 工资=(select MAX(工资) from 表名)
这里用到了子查询。

不能这样用:select * from 表名 where 工资=MAX(工资),因为聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

用子查询就可以了,不用排序的。排序当然也可以的。如下:
select top 1 * from 表名
order by 工资 DESC      --这样如果最高工资有两个人或以上,就不对了,用子查询最好
作者: 王林    时间: 2011-12-20 22:54
余飞 发表于 2011-12-14 11:05

豁然开朗{:3_62:}
作者: 黄山    时间: 2011-12-25 18:33
select *from T_employee where salary=(select max(salary) from T_employee )

子查询最好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2