Cómo crear un USB booteable de Linux Mint 20.1 paso a paso
En bases de datos MySQL, a menudo necesitamos filtrar registros según un rango de valores, especialmente cuando trabajamos con importes de pedidos en una tienda online.
En esta guía aprenderás cómo mostrar los clientes cuyos pedidos no están entre 120 y 540 euros, utilizando INNER JOIN y NOT BETWEEN.
Una consulta sencilla pero muy útil para detectar compras atípicas o generar informes financieros precisos.
Filtrar pedidos fuera de un rango de importe puede ayudarte a:
Detectar pedidos demasiado bajos o altos.
Analizar clientes con comportamientos de compra inusuales.
Preparar reportes de ventas o análisis financieros detallados.
Identificar oportunidades de fidelización o de revisión de precios.
Antes de ejecutar cualquier consulta, asegúrate de estar en la base de datos correcta:
USE tiendaonline;
Esto garantiza que las operaciones afecten a las tablas adecuadas.
Antes de unir datos, conviene conocer su estructura.
Por ejemplo:
-- Consultar todos los pedidos
SELECT * FROM pedidos;
-- Consultar todos los clientes
SELECT * FROM clientes;
Así puedes verificar que las columnas id_cliente, nombre y total existen y tienen los tipos de datos correctos.
Para relacionar los pedidos con los clientes que los realizaron, utilizamos INNER JOIN:
SELECT c.nombre, p.total
FROM pedidos AS p
INNER JOIN clientes AS c ON p.id_cliente = c.id_cliente;
Explicación:
INNER JOIN une las filas que coinciden en id_cliente.
c.nombre muestra el nombre del cliente.
p.total muestra el importe del pedido.
Con esta combinación, puedes ver quién hizo cada pedido y cuánto gastó.
Ahora aplicamos el filtro usando NOT BETWEEN:
SELECT c.nombre, p.total
FROM pedidos AS p
INNER JOIN clientes AS c ON p.id_cliente = c.id_cliente
WHERE p.total NOT BETWEEN 120.00 AND 540.00;
NOT BETWEEN 120.00 AND 540.00 excluye todos los pedidos dentro del rango 120–540.
Muestra solo los pedidos menores de 120 o mayores de 540 euros.
Devuelve los clientes que cumplen esa condición.
Supongamos que la tabla pedidos tiene los siguientes valores:
| id_cliente | total |
|---|---|
| 1 | 100.00 |
| 2 | 200.00 |
| 3 | 600.00 |
Resultado de la consulta:
| nombre | total |
|---|---|
| Juan | 100.00 |
| María | 600.00 |
El pedido de 200 € queda fuera porque está dentro del rango de 120 a 540.
✅ Usa alias cortos: Facilitan la lectura (p para pedidos, c para clientes).
✅ Verifica tipos de datos: La columna total debe ser numérica (DECIMAL o FLOAT).
✅ Combina filtros: Puedes añadir condiciones extra, como fechas:
WHERE p.total NOT BETWEEN 120.00 AND 540.00
AND p.fecha >= '2025-01-01';
✅ Ordena los resultados: Para ver primero los pedidos más altos:
ORDER BY p.total DESC;
Consulta completa optimizada:
SELECT c.nombre, p.total
FROM pedidos AS p
INNER JOIN clientes AS c ON p.id_cliente = c.id_cliente
WHERE p.total NOT BETWEEN 120.00 AND 540.00
ORDER BY p.total DESC;
Filtrar pedidos fuera de un rango de importe en MySQL es una tarea simple pero muy poderosa.
Combinando INNER JOIN y NOT BETWEEN, puedes:
Detectar comportamientos de compra atípicos.
Identificar clientes con pedidos fuera de lo normal.
Generar reportes precisos y útiles para tu negocio.
Estas consultas son esenciales para el análisis de datos, reportes de ventas y la gestión eficiente de tiendas online.
![]() |
¿Qué diferencia hay entre BETWEEN y NOT BETWEEN?
BETWEEN incluye los valores dentro del rango, mientras que NOT BETWEEN los excluye, mostrando solo los que están fuera.
¿Puedo usar NOT BETWEEN con fechas?
Sí, funciona igual. Por ejemplo:
WHERE fecha NOT BETWEEN '2025-01-01' AND '2025-12-31';
¿Qué pasa si hay valores nulos en total?
Los registros con NULL no se muestran, porque NOT BETWEEN no evalúa NULL.
Puedes añadir OR p.total IS NULL para incluirlos.
¿Se puede combinar con GROUP BY?
Sí. Por ejemplo, para contar cuántos pedidos fuera de rango tiene cada cliente:
SELECT c.nombre, COUNT(*) AS cantidad
FROM pedidos AS p
INNER JOIN clientes AS c ON p.id_cliente = c.id_cliente
WHERE p.total NOT BETWEEN 120 AND 540
GROUP BY c.nombre;
¿Cómo mejorar el rendimiento?
Asegúrate de que id_cliente y total estén indexados y usa tipos de datos adecuados (DECIMAL(10,2) para importes).
Comentarios
Publicar un comentario