SQL Dojo Beta
Trampa

Datos sucios

Un archivo sucio no da ningún error: todas las consultas funcionan y las respuestas son falsas. Revise una tabla nueva antes de fiarse de ella.

Qué buscar en una tabla nueva:

  • Números o fechas guardados como texto: se ordenan como palabras ('99' > '138'). Compruébelo con DESCRIBE, luego CAST o TRY_CAST.
  • Formatos de hoja de cálculo: 1.614,00 €, 03/04/2024. Quite la moneda y el separador de miles; lea las fechas con strptime.
  • Valores de relleno: 1900-01-01, -1, 0, 'N/A' para decir «falta». Mire los valores extremos y los más frecuentes, luego NULLIF.
  • Vacío no es NULL: '' y ' ' cuentan como valores. NULLIF(TRIM(x), '').
  • Valores imposibles: un stock negativo, un descuento del 140 %, un evento posterior a la carga. MIN, MAX y COUNT(*) - COUNT(columna) en cada columna los muestran.
  • Claves casi iguales: un espacio, una mayúscula, un acento, y el join pierde filas en silencio. Compare el número de filas; TRIM, LOWER.
  • Duplicados: una fila importada dos veces, una persona escrita de dos maneras.

Limpie una sola vez, donde llegan los datos, y aparte las filas que no pueda corregir (una tabla de cuarentena) en lugar de borrarlas.

La trampa

WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(quantity) AS biggest
FROM stock;
biggest
99
Probarlo en Randori

La corrección

WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(CAST(quantity AS INTEGER)) AS biggest
FROM stock;
biggest
138
Probarlo en Randori