求Sql语句(50分)

  • 主题发起人 主题发起人 xfecczgh
  • 开始时间 开始时间
X

xfecczgh

Unregistered / Unconfirmed
GUEST, unregistred user!
在emp(只能用该表)表中查询每个部门最高的工资,并列出姓名(要求速度快)。
 
用啊adoquery
select max(工资字段),姓名字段 from 表
取的时候:用adoquery1.fields[0].asinteger和adoquery1.fields[1].asinteger
就可以取出:
我就是这样取得
 
select * from test
where cast(sal as varchar(30)) + Depart in(
select cast(max(sal) as varchar(30)) + Depart as sal from test group by depart)

CREATE TABLE [dbo].[test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[depart] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[EmpName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[sal] [int] NULL
) ON [PRIMARY]
GO




 
Your table structure?
 
要用GROUP BY子句:
SELECT MAX(工资),姓名 FROM 表
GROUP BY 部门
 
select 部门,max(工资字段),姓名字段 from 表 group by 部门


 
一个SQL语句比较困难吧?能做出来?因为姓名不是分租字段,不可以输出的
 
对各位网友的答复
emp表来源与oracle的例子表,用户是scott.有ename,sal,deptno等字段。
lab01,badboynet的方法肯定出错,因为姓名没有分组.
继续关注!
 
SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- ---------- --------- --------- ---------
7369 SMITH CLERK 7902 17-12る-80 800 20
7499 ALLEN SALESMAN 7698 20-2る -81 1600 300 30
7521 WARD SALESMAN 7698 22-2る -81 1250 500 30
7566 JONES MANAGER 7839 02-4る -81 2975 20
7654 MARTIN SALESMAN 7698 28-9る -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5る -81 2850 30
7782 CLARK MANAGER 7839 09-6る -81 2450 10
7788 SCOTT ANALYST 7566 19-4る -87 3000 20
7839 KING PRESIDENT 17-11る-81 5000 10
7844 TURNER SALESMAN 7698 08-9る -81 1500 0 30
7876 ADAMS CLERK 7788 23-5る -87 1100 20
7900 JAMES CLERK 7698 03-12る-81 950 30
7902 FORD ANALYST 7566 03-12る-81 3000 20
7934 MILLER CLERK 7782 23-1る -82 1300 10

14 rows selected. 1 select ename,max,b.deptno

SQL>
1 select ename,max,deptno
2 from
3 (select deptno,max(sal) max from emp group by deptno) a,
4 emp b
5 where a.deptno=b.deptno
6* and b.sal=a.max
SQL> /

ENAME MAX DEPTNO
---------- --------- ---------
KING 5000 10
SCOTT 3000 20
FORD 3000 20
BLAKE 2850 30

//这个答案你是不是楼上所需求的?你的分别忘了给我啊!
 
select bm,xm,gz from emp a where
gz=(select max(gz) from emp where bm=a.bm)
 
这个算法有创意:
 select ename,deptno
 from  emp a
 where sal=
    (select max(sal)
     from emp
     where deptno=a.deptno)
分我不要了,给楼上去吧!
 
两人的答案都正确,看后获益非浅,但是速度有差别。
我用2226条记录做了一个测试,imking的用了16秒,dldyj的用了54秒。
看来SQL的技巧性非常强。
最后再问一个问题,是否任何目的都可以写出SQL语句。
 
多人接受答案了。
 
后退
顶部