SQL | Con cláusula de empate

Esta publicación es una continuación de la Cláusula SQL Offset-Fetch

Ahora, entendemos cómo usar la Cláusula Fetch en Oracle Database, junto con la Compensación especificada y también entendemos que la cláusula Fetch es la cláusula recién agregada en Oracle Database 12c o es la nueva característica agregada en Oracle Database 12c.

Ahora considere el siguiente ejemplo:

Supongamos que tenemos una tabla llamada myTable con los siguientes datos:

ID    NAME        SALARY
-----------------------------
1    Geeks      10000
4    Finch      10000
2    RR         6000
3    Dhoni      16000
5    Karthik    7000
6    Watson     10000

Ahora, supongamos que queremos que las primeras tres filas estén ordenadas por salario en orden descendente, luego se debe ejecutar la siguiente consulta:


Query:
SELECT * from myTable 
order by salary desc 
fetch first 3 rows only;

Output: 
We got only first 3 rows order by Salary in Descending Order

ID    NAME    SALARY
--------------------------
3    Dhoni    16000
1    Geeks    10000
4    Finch    10000

Nota : en el resultado anterior, obtuvimos las primeras 3 filas, ordenadas por Salario en orden descendente, pero tenemos una fila más con el mismo salario, es decir, la fila con el nombre Watson y Salario 10000 , pero no apareció porque restringimos nuestra salida solo a las tres primeras filas. Pero esto no es óptimo, porque la mayoría de las veces en aplicaciones en vivo también se nos pedirá que muestremos las filas vinculadas.

Ejemplo de la vida real : supongamos que tenemos 10 corredores corriendo y solo tenemos 3 premios, es decir, primero, segundo, tercero, pero supongamos que los corredores 3 y 4 terminaron la carrera juntos al mismo tiempo, por lo que en este caso tenemos un empate entre 3 y 4 y por eso ambos son titulares del Puesto 3.

con lazos

Entonces, para superar el problema anterior, Oracle introduce una cláusula conocida como cláusula With Ties . Ahora, veamos nuestro ejemplo anterior usando la cláusula With Ties.

Query:
SELECT * from myTable 
order by salary desc 
fetch first 3 rows With Ties;

Output:
See we get only first 3 rows order by Salary in Descending Order along with Tied Row also

ID    NAME       SALARY
--------------------------
3    Dhoni     16000
1    Geeks     10000
6    Watson    10000 // We get Tied Row also
4    Finch     10000

Ahora, mira, también obtuvimos la fila empatada , que no obtuvimos anteriormente.

Nota : Obtenemos la fila vinculada en nuestra salida, solo cuando usamos la cláusula order by en nuestra instrucción Select. Supongamos que, si no usamos la cláusula order by, y aún estamos usando la cláusula with ties , entonces no obtendremos la fila vinculada en nuestra salida y la consulta se comporta igual que si estamos usando la cláusula ONLY en lugar de With Ties cláusula.

Ejemplo : supongamos que ejecutamos la siguiente consulta (sin usar la cláusula order by):

Query:
SELECT * from myTable 
fetch first 3 rows With Ties;

Output:
See we won't get the tied row because we didn't use order by clause

ID    NAME      SALARY
--------------------------
1    Geeks    10000
4    Finch    10000
2    RR       6000

En el resultado anterior, no obtendremos la fila empatada y solo obtendremos las primeras 3 filas. Por lo tanto, With Ties está vinculado con la cláusula order by , es decir, obtenemos la fila vinculada en la salida si y solo si usamos With Ties junto con la cláusula Order by.

Nota : asegúrese de ejecutar estas consultas en Oracle Database 12c, porque la cláusula Fetch es la característica recién agregada en Oracle 12c, también con vínculos, se ejecuta solo en Oracle Database 12c, estas consultas no se ejecutarán en versiones anteriores de 12c como 10g o 11g.

Referencias : Acerca de la cláusula Fetch, así como la cláusula With Ties , Realización de consultas SQL en línea

Publicación traducida automáticamente

Artículo escrito por classyallrounder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *