CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

有点复杂的语句:返回多个最大值(不同类别)

楼主hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)2005-04-04 08:40:53 在 MS-SQL Server / 基础类 提问

比如,返回男生工资最高的人名,和女生工资最高的人名  
   
  表info:   字段:sex   salary   name  
   
  我是用在考勤里,小弟从来没写过复合sql语句,我觉得用group   by   或having   或distinct能解决,请大家指点!  
   
  我现在自己也试试,谢谢! 问题点数:0、回复次数:14Top

1 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 08:44:18 得分 0

自己解决了,呵呵  
   
  select   Max(salary),name   from   info   group   by   (sex)  
   
  但还请那位大哥讲解一下复合sql语句的结构?如何改写上述查询?或者能否举一个最简单的复合sql语句的例子,小弟学习一下?  
   
  多谢多谢!Top

2 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 08:46:38 得分 0

是用having或where   exists吗?Top

3 楼iuhxq(小灰)回复于 2005-04-04 08:52:41 得分 0

你的语句根本通不过!!!  
   
  开始我就觉得不能通过,我打开SQL试了一下,果然通不过。如果你想显示name应该这样  
  select   *   from   info   where   salary   in   (select   max(salary)   from   info   group   by   sex)Top

4 楼davytao1018(爱的代价)回复于 2005-04-04 09:00:33 得分 0

select   top   1     form   table   where   sex='男'   order   by   salary   desc  
  union    
  select   top   1     form   table   where   sex='女'   order   by   salary   desc  
   
  --或者  
   
  select   *   from   table     a   where   not   exists(select   *   from   table   b   where   b.salary>a.salary   and   b.sex=a.sex)Top

5 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 09:16:32 得分 0

我通过了!在access的sql里都能通过!  
   
  不可能通不过!Top

6 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 09:19:29 得分 0

select   Max(time)   from   EntryExitInfo   group   by   date.  
   
  我的结果很好!就是每天(date)最大的时间。access2000Top

7 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 09:20:36 得分 0

天!还有更惊奇的事情,这是access自动规范过后的我的sql(绝对照样可以执行),谁见过中文的sql?太牛了微软。这可不是他的自然语言查询啊  
   
  自己写出来的复杂sql:)   select   count(ip),ip   from   guestbook   group   by   ip  
  统计不同项的个数  
   
  getdate()当前  
  datepart(“yyyy”/q/mm,表达式)  
  tencentIP:218.17.209.23   80  
   
  SELECT     count(datepart("yyyy",addtime))as   次数   ,datepart("yyyy",addtime)as   年   ,datepart("m",addtime)   as   月,datepart("d",addtime)   as   日  
  FROM   guestbook   group   by   datepart("yyyy",addtime),datepart("m",addtime),datepart("d",addtime)  
   
  选出多个不同类别的最大:  
  Select   Max(time)      
  FROM   EntryExitFile   group   by   date;  
   
   
  复合语句:  
  用having   或where   exists  
   
  给客户做网站后台用SQL   Server时,数据库要移交给客户时一般的做法是怎样的?    
  应该是写一个   .SQL文件让客户到查询分析器里执行吧!  
  不懂==>那些   TSQL语句要全部手写还是用SQLSERVER里面其他工具生成?  
   
  在企业管理器中,用鼠标右键点数据库,然后选“所有任务”,再选“生成SQL脚本”即可  
   
  如何在选择时多一个自增1的列?  
  select   id=identity(int,1,1),*   into   #tmp   from   tablename  
  select   *   from   #tmp  
  drop   table   #tmp  
  或  
  --要求名称不能重复  
  select   (select   count(*)   from   表   where   名称<=a.名称)   as   编号  
  from   表   a  
  order   by   名称  
   
  天啊,这是access自己改我写好的语句  
  SELECT   Max(entryexitfile.Time)   AS   Time之Max,   Min(entryexitfile.Time)   AS   Time之Min  
  FROM   entryexitfile  
  WHERE   (((entryexitfile.Date)>#3/29/2005#))  
  GROUP   BY   entryexitfile.Date;  
  Top

8 楼iuhxq(小灰)回复于 2005-04-04 09:21:20 得分 0

我是在SQL   SERVER里,你试试。  
  Top

9 楼paoluo(一天到晚游泳的鱼)回复于 2005-04-04 09:23:16 得分 0

你的  
   
  select   Max(time)   from   EntryExitInfo   group   by   date.  
   
  我的结果很好!就是每天(date)最大的时间。access2000  
   
  这句通过是没问题,但是这句  
   
  select   Max(salary),name   from   info   group   by   (sex)  
   
  应该是不可以通过的吧。Top

10 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 09:53:55 得分 0

对,呵呵,没有group的,会提示“查询不包含作为合计函数一部分的表达式xx字段”  
   
  就是说,除非作为max的参数,否则不在group   by里的字段,是不能select出来的Top

11 楼paoluo(一天到晚游泳的鱼)回复于 2005-04-04 09:57:30 得分 0

那才对,你将name字段加上,这句话肯定就问题。  
   
  select   Max(salary),name   from   info   group   by   (sex)  
   
  3楼的语句是对的。Top

12 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 09:58:44 得分 0

对不住小灰。我是举例所以打错了,我用的是entry表却故意举了个salary的例子结果画蛇添足加了个group   by里没引用的name字段,不过现在认识又深了一步。如上。幸好我最早的思路没错。  
   
  有空欢迎访问我的blog:生活、运动、计算机技术   hunterdong.blogcn.com  
   
  上学时没给我们讲这个啊,呵呵!这里有计96的嘛Top

13 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 10:06:01 得分 0

再讨论一下:  
   
  把字段加在group   by里,然后单句select出来,  
   
  或如小灰的select   *   from   info   where   salary   in   (select   max(salary)   from   info   group   by   sex)  
   
  那种效率高or常用?盼大家指点  
   
  还有爱的代价的思路也很好的  
  select   top   1     form   table   where   sex='男'   order   by   salary   desc  
  union    
  select   top   1     form   table   where   sex='女'   order   by   salary   desc  
   
  --或者  
   
  select   *   from   table     a   where   not   exists(select   *   from   table   b   where   b.salary>a.salary   and   b.sex=a.sex  
   
   
   
  Top

14 楼hunter1ok(道不行,乘桴浮于海 hunterdong.blogcn.com)回复于 2005-04-04 10:08:22 得分 0

应该是小灰的语句好。只gruop一个。  
   
  那和select   *   from   table     a   where   not   exists(select   *   from   table   b   where   b.salary>a.salary   and   b.sex=a.sex   比较呢?Top

相关问题

  • 一条语句求最大值
  • 求行中的最大值sql语句,,,,
  • 怎样得到用SQL语句求最大值的结果?
  • 请问一条找最大值的sql语句
  • sql语句,求每个分组中的最大值
  • 求一段关于最大值的SQL语句。
  • 写一段关于最大值的SQL语句。
  • sql语句中,数字的最大值用什么符号表示,如select * from t1 where aa>100 and aa<最大值,这个最大值用什么表示呢?
  • 关于SQL语句CREAT SEQUCE,如何设置最大值和最小值?
  • 用slq语句怎样实现从数据库取最大值?或最小值

关键词

  • 语句
  • sql
  • 客户
  • access
  • date
  • ip
  • addtime
  • sex
  • datepart
  • salary

得分解答快速导航

  • 帖主:hunter1ok

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo