QuieroProgramar por Rodri Gonzalez
SQL · Lección 04 de 15

ORDER BY, LIMIT y DISTINCT

Ordenar resultados, limitar la cantidad de filas y eliminar duplicados. Estos tres conceptos son la base de los reportes "Top N" que hacés todos los días como analista: "los 10 clientes con mayor saldo", "ciudades únicas de la cartera".

70–90 min Prerrequisitos: SQL 03
01

Concepto teórico

ORDER BY — ordenar resultados

ORDER BY ordena las filas del resultado. Por defecto es ascendente (ASC). Para descendente usás DESC:

-- Ascendente (por defecto)
SELECT * FROM clientes ORDER BY score;       -- 590, 645, 680, 720, 810

-- Descendente
SELECT * FROM clientes ORDER BY saldo DESC;  -- 890000, 320000, 150000...

-- Múltiples columnas: primero por ciudad ASC, después por saldo DESC
SELECT * FROM clientes ORDER BY ciudad ASC, saldo DESC;
Orden de múltiples columnas: cuando ordenás por 2+ columnas, SQL ordena primero por la primera. Dentro de los empates de la primera, ordena por la segunda. Es como ordenar una planilla de Excel por columna A y después por columna B. Esto es clave para reportes agrupados: "por ciudad, y dentro de cada ciudad, por saldo descendente".
Sin ORDER BY, el orden NO está garantizado. SQL puede devolver filas en cualquier orden si no especificás ORDER BY. Aunque parezca que siempre salen en el mismo orden, esto NO es una garantía. Si el orden importa para tu reporte, SIEMPRE usá ORDER BY.

LIMIT y OFFSET — paginación

LIMIT n devuelve como máximo n filas. OFFSET m salta las primeras m filas. Juntos permiten paginación:

-- Top 5 clientes por saldo
SELECT * FROM clientes ORDER BY saldo DESC LIMIT 5;

-- Página 2 (filas 6-10): saltear 5, traer 5
SELECT * FROM clientes ORDER BY saldo DESC LIMIT 5 OFFSET 5;

-- Top 3 por score
SELECT nombre, score FROM clientes ORDER BY score DESC LIMIT 3;
Patrón "Top N": ORDER BY columna DESC LIMIT N es el patrón más usado en reportes. "Top 10 clientes por saldo", "Top 5 productos más vendidos", "Los 3 meses con más transacciones". Lo vas a usar constantemente.

DISTINCT — valores únicos

DISTINCT elimina filas duplicadas del resultado. Es el equivalente de .unique() o .drop_duplicates() en pandas:

-- Todas las ciudades (con repetidas)
SELECT ciudad FROM clientes;
-- Buenos Aires, Córdoba, Buenos Aires, Rosario, Buenos Aires

-- Ciudades únicas
SELECT DISTINCT ciudad FROM clientes;
-- Buenos Aires, Córdoba, Rosario

-- Contar ciudades únicas
SELECT COUNT(DISTINCT ciudad) AS ciudades_unicas FROM clientes;

DISTINCT se aplica a TODA la fila. Si seleccionás 2 columnas, elimina duplicados del par: SELECT DISTINCT ciudad, categoria FROM clientes devuelve combinaciones únicas de ciudad+categoría.

En el trabajo: DISTINCT + COUNT es una de las consultas más frecuentes en análisis exploratorio: "¿cuántos clientes únicos tenemos?", "¿cuántas ciudades distintas?", "¿cuántos productos diferentes se vendieron?". Es lo primero que hacés cuando conocés una tabla nueva.
02

Ejemplos explicados paso a paso

Ejemplo 1: ORDER BY básico — ASC y DESC

ejemplo_01_orderby.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: ORDER BY con múltiples columnas

ejemplo_02_multi_order.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: LIMIT — Top N y paginación

ejemplo_03_limit.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: DISTINCT — valores únicos

ejemplo_04_distinct.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Combinación — reporte Top N filtrado

ejemplo_05_combinado.sqlSQL

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Cláusula Sintaxis Ejemplo
Orden ascendente ORDER BY col ASC ORDER BY nombre (ASC es default)
Orden descendente ORDER BY col DESC ORDER BY saldo DESC
Múltiples columnas ORDER BY c1, c2 DESC ORDER BY ciudad, saldo DESC
Limitar filas LIMIT n LIMIT 10
Paginar LIMIT n OFFSET m LIMIT 10 OFFSET 20
Valores únicos SELECT DISTINCT col SELECT DISTINCT ciudad
Contar únicos COUNT(DISTINCT col) COUNT(DISTINCT cliente)
Orden de cláusulas
SELECTFROMWHEREORDER BYLIMIT
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: ORDER BY ASC

Ordená clientes por nombre alfabéticamente. Debe incluir Fernández primero.

ejercicio_01.sqlDebe incluir "Fernández"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: ORDER BY DESC

Ordená por saldo de mayor a menor. Debe incluir 890000 primero.

ejercicio_02.sqlDebe incluir "890000"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: LIMIT — Top 3

Traé los 3 clientes con mayor score. Debe incluir Pérez.

ejercicio_03.sqlDebe incluir "Pérez"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: DISTINCT

Listá las ciudades únicas de la tabla. Debe incluir Rosario.

ejercicio_04.sqlDebe incluir "Rosario"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: COUNT(DISTINCT)

Contá cuántas ciudades distintas hay. Debe incluir 3.

ejercicio_05.sqlDebe incluir "3"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: ORDER BY múltiples columnas

Ordená por ciudad ASC y dentro de cada ciudad por score DESC. Debe incluir Pérez primero dentro de BsAs.

ejercicio_06.sqlDebe incluir "Pérez"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Top N con WHERE

Top 3 clientes ACTIVOS por saldo descendente. Debe incluir Pérez.

ejercicio_07.sqlDebe incluir "Pérez"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Paginación con OFFSET

Simulá paginación: traé la "página 2" (registros 4-6) de clientes ordenados por nombre. Debe incluir Pérez.

ejercicio_08.sqlDebe incluir "Pérez"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: DISTINCT con ORDER BY

Listá los tipos únicos de transacción ordenados alfabéticamente. Debe incluir compra.

ejercicio_09.sqlDebe incluir "compra"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Reporte Top 5 con categoría y filtros

Top 5 clientes activos por saldo, con columna de categoría (CASE WHEN), ordenados por saldo DESC. Mostrá también el ranking (1 a 5 usando un truco). Debe incluir Premium.

ejercicio_10.sqlDebe incluir "Premium"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (05 · Funciones de agregación) vas a aprender COUNT, SUM, AVG, MIN, MAX y ROUND — las herramientas para resumir datos.