Nivel 1 · Lista de precios, del más caro al más barato
¿Es nuevo para ti? Lee primero el concepto: Por qué una tabla no tiene orden hasta que lo pides
0 de 3
La solicitud

De Jessica Turner, Gerente de Merchandising
Tu objetivo
Desde products, devuelve name y unit_price, ordenados por unit_price de mayor a menor y luego por name de A a Z cuando los precios empaten.
- Lee de la tabla
productspendiente - Muestra exactamente
nameunit_pricependiente - 120 filas, ordenadas como se pidependiente
Tu consulta
Cargando el editor…
Solución de referencia
| product_id | name | category | subcategory | unit_price |
|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Jessica, y por qué
Tablas
Datos de la tienda Harbor & Pine, listos para consultar.
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NULL | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NULL |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NULL |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NULL |
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NULL |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NULL |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NULL | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NULL | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NULL | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NULL | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NULL | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
ORDER BY ordena el resultado. Va al final, después de FROM y WHERE:
SELECT name, unit_price
FROM products
ORDER BY unit_price DESC;
ASC (ascendente, el valor por defecto) ordena de menor a mayor, de la A a la Z, de lo más antiguo a lo más reciente. DESC ordena al
revés. Cada columna de ordenamiento tiene su propia dirección.
Desempates
Varios productos pueden compartir el mismo precio. Con solo ORDER BY unit_price DESC, la base de datos puede
poner los productos empatados en cualquier orden, y ese orden puede cambiar de una ejecución a otra o entre
tu laptop y producción. En un informe, eso significa una lista distinta cada vez que alguien lo
actualiza. Añade una segunda columna para decidir los empates:
ORDER BY unit_price DESC, name ASC
La segunda columna solo importa cuando la primera empata. Un buen desempate final es una columna única,
como una clave primaria (product_id), porque entonces el orden queda totalmente determinado. Los analistas llaman a esto
un ordenamiento determinista.
Ordenar por cosas que no seleccionaste
Puedes ordenar por cualquier columna de la tabla, incluso una que no esté en la lista de SELECT, y por expresiones:
SELECT name
FROM products
ORDER BY unit_price - unit_cost DESC;
También puedes ordenar por un alias de la lista de SELECT. ORDER BY se evalúa lógicamente después de
SELECT, así que los alias son visibles ahí en todas las bases de datos importantes, a diferencia de en WHERE:
SELECT name, unit_price * 0.9 AS sale_price
FROM products
ORDER BY sale_price DESC;
Ordenar por posición
ORDER BY 2 DESC ordena por la segunda columna seleccionada. Es útil para una exploración rápida y está
admitido en Postgres, DuckDB, MySQL y BigQuery, pero se rompe en silencio cuando alguien inserta una
columna en la lista de SELECT. Usa nombres en todo lo que guardes.
El texto se ordena por códigos de carácter
El texto se ordena alfabéticamente, pero las reglas exactas (llamadas intercalación o collation) dependen de la base de datos.
Las mayúsculas y las minúsculas pueden ordenarse por separado, así que 'oak' puede quedar después de 'Willow'. Cuando importa el orden de
presentación de los nombres, ordena por LOWER(name).
Errores comunes
- Poner
ORDER BYantes deWHERE. El orden de las cláusulas es fijo:SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT. - Ordenar texto que contiene números. Si un precio estuviera guardado como texto,
'100'se ordenaría antes que'9'. Revisa los tipos de columna cuando un ordenamiento se vea raro. - Asumir que una tabla “ya está ordenada”. Las tablas no tienen un orden inherente. Solo
ORDER BYgarantiza uno.
En SQL Server
ORDER BY, ASC, DESC y los desempates son iguales. Dos cosas cambian: los NULL cuentan como el valor más pequeño (primero en ascendente, últimos en descendente), y la intercalación por defecto ordena el texto sin distinguir mayúsculas, así que ‘apple’ y ‘Apple’ se ordenan juntos.
SELECT name, unit_price FROM products ORDER BY unit_price DESC, name; ¡Linterna encendida!
Practicaste: order bydesctie breaker
- Resuelto
- Sin pistas
- Al primer intento
