考虑Oracleemp表。我想用顶薪与获得职工department = 20和job = clerk。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作:
emp
department = 20
job = clerk
select * from scott.emp where deptno = 20 and job = 'CLERK' and sal = (select max(sal) from scott.emp where deptno = 20 and job = 'CLERK')
这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用group by?顺便说一句,如果这很重要,我正在使用Oracle。
group by
以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好的SQL模式。
SELECT * FROM scott.emp WHERE (deptno,job,sal) IN (SELECT deptno, job, max(sal) FROM scott.emp WHERE deptno = 20 and job = 'CLERK' GROUP BY deptno, job )
另请注意,这将在Oracle和Postgress(我认为)中有效,但不适用于MS SQL。