Office Address

  • 123/A, Miranda City Prikano
  • +0989 7876 9865 9
  • info@example.com

Social List

SQL más inteligente: Aprende cómo WITH TIES puede mejorar tus reportes

Lectura: 3 minutos

¿Qué es WITH TIES y por qué deberías usarlo?

Cuando trabajamos con grandes volúmenes de datos en SQL, es común querer limitar la cantidad de registros devueltos en una consulta para mejorar el rendimiento o enfocarnos solo en la información más relevante. Es aquí donde la cláusula FETCH FIRST o LIMIT se convierte en una herramienta muy útil. Sin embargo, en algunos casos, estas cláusulas pueden excluir filas que comparten el mismo valor con la última fila seleccionada.

¿Te ha pasado que filtras los 5 productos más vendidos y notas que algunos productos con el mismo nivel de ventas quedan fuera del reporte? Aquí es donde WITH TIES entra en acción.

WITH TIES es una opción que se usa junto con FETCH FIRST en SQL para incluir automáticamente las filas adicionales que tengan el mismo valor en la columna utilizada para ordenar los datos. Esto asegura que los resultados no queden truncados arbitrariamente, sino que incluyan todos los registros relevantes, ofreciendo un análisis más completo y preciso.

¿Por qué deberías usar WITH TIES?

Imagina que estás generando un reporte de los 10 empleados con los salarios más altos, pero resulta que varios empleados tienen el mismo salario en la posición número 10. Si utilizas simplemente FETCH FIRST 10 ROWS ONLY, podrías estar dejando fuera a empleados con el mismo salario, generando informes incompletos o inexactos. Con WITH TIES, todos los empleados con el mismo salario serán incluidos, garantizando la integridad de la información.

Ventajas de usar WITH TIES:

  • Evita la pérdida de datos importantes que comparten el mismo valor en la columna de orden.
  • Útil en reportes donde la precisión y la equidad en la presentación de datos son cruciales.
  • Garantiza consistencia cuando los datos están agrupados por atributos clave como ventas, calificaciones o puntuaciones.

¿Cuándo deberías usar WITH TIES?

Puedes considerar el uso de WITH TIES en los siguientes escenarios:

  1. Reportes de ranking: Cuando necesitas mostrar a todos los participantes con puntajes iguales en un ranking de rendimiento.
  2. Análisis de ventas: Al seleccionar los productos más vendidos sin dejar fuera los que alcanzaron las mismas cifras.
  3. Listados limitados: Cuando se requiere un número limitado de registros pero se quiere mantener equidad en los datos presentados.
  4. Visualización de datos: Para asegurar que los reportes reflejen correctamente las tendencias y patrones de datos.

Primer ejemplo: obtener los 3 salarios más altos con posibles empates

Supongamos que tenemos la tabla EMPLOYEES con los siguientes datos:

EMPLOYEE_IDNAMESALARY
1Ana5000
2Luis7000
3Marta8000
4Juan7000
5Pepe6000
6Laura8000

Si usamos la siguiente consulta sin WITH TIES:

SELECT NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
FETCH FIRST 3 ROWS ONLY;

Resultado esperado (sin WITH TIES):

 NAME  | SALARY
-------|--------
Marta | 8000
Laura | 8000
Luis | 7000

Consulta usando WITH TIES:

SELECT NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
FETCH FIRST 3 ROWS WITH TIES;

Resultado esperado (con WITH TIES):

 NAME  | SALARY
-------|--------
Marta | 8000
Laura | 8000
Luis | 7000
Juan | 7000

Explicación:

  • La cláusula WITH TIES incluye filas adicionales si los valores de la columna ordenada coinciden con el último valor límite (7000 en este caso).
  • Sin WITH TIES, solo obtendríamos las primeras 3 filas estrictamente.

Segundo ejemplo: seleccionar los productos más caros con posibles empates

Supongamos la tabla PRODUCTS:

PRODUCT_IDPRODUCT_NAMEPRICE
101Laptop1200
102Tablet800
103Monitor500
104Phone800
105Headphones300

Consulta para obtener los 2 productos más caros sin empates:

SELECT PRODUCT_NAME, PRICE
FROM PRODUCTS
ORDER BY PRICE DESC
FETCH FIRST 2 ROWS ONLY;

Resultado esperado sin WITH TIES:

 PRODUCT_NAME | PRICE
--------------|------
Laptop | 1200
Tablet | 800

Consulta para obtener los productos más caros considerando posibles empates:

SELECT PRODUCT_NAME, PRICE
FROM PRODUCTS
ORDER BY PRICE DESC
FETCH FIRST 2 ROWS WITH TIES;

Resultado esperado con WITH TIES:

 PRODUCT_NAME | PRICE
--------------|------
Laptop | 1200
Tablet | 800
Phone | 800

Explicación:
El producto “Phone” también se incluye porque tiene el mismo precio que “Tablet”, asegurando que no se excluyan filas con valores idénticos.

Te recomiendo usarlo en estos casos:

  • Cuando desees incluir filas adicionales con valores idénticos en la columna de orden.
  • Asegura resultados más completos en consultas donde los valores pueden repetirse.
  • Puede generar resultados inesperados si no se considera correctamente el impacto en la cantidad de registros devueltos.

Post a Comment

Your email address will not be published. Required fields are marked *