在 Oracle 数据库中,FETCH FIRST ... ROWS WITH TIES 是一个子句,它用于与 ORDER BY 子句结合,以获取与第一组(根据排序条件)具有相同排序值的所有行。这通常用于在结果集中包括那些与最前面的几行具有相同排序值的行。
FETCH FIRST ... ROWS WITH TIES 是一个子句,Oracle 12c 及更高版本中可用
下面是一个示例查询包含员工和他们工资的表:
sql
HR@orcl> select employee_id,first_name,last_name,salary from employees ORDER BY salary DESC;
EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY
----------- -------------------- ------------------------- ----------
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
145 John Russell 14000
146 Karen Partners 13500
201 Michael Hartstein 13000
108 Nancy Greenberg 12008
205 Shelley Higgins 12008
147 Alberto Errazuriz 12000
168 Lisa Ozer 11500
114 Den Raphaely 11000
例如,假设你有一个包含员工和他们工资的表,并且你想获取工资最高的前两个员工。但是,如果有多个员工具有相同的最高工资,你可能也想包括他们。这时,你可以使用 FETCH FIRST ... ROWS WITH TIES。
sql
HR@orcl> select employee_id,first_name,last_name,salary from employees ORDER BY salary DESC fetch first 2 rows with ties;
EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY
----------- -------------------- ------------------------- ----------
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
在这个查询中:
-
ORDER BY salary DESC 会将员工按工资从高到低排序。
-
FETCH FIRST 2 ROWS WITH TIES 会获取前两名(即工资最高的两名),但如果有多名员工的工资与这两名相同,那么这些员工也会被包括在结果集中。
这个子句在 Oracle 12c 及更高版本中可用。如果你使用的是较早版本的 Oracle,那么你可能需要使用不同的方法(如子查询或窗口函数)来实现相同的效果。