有点复杂的语句:返回多个最大值(不同类别)
比如,返回男生工资最高的人名,和女生工资最高的人名
表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




