La solicitud

De Ashley Rivera, Líder de Contenido Web
Tu objetivo
Paso 1 de 3. Desde products, devuelve product_id, name y unit_price de los 5 productos activos más caros de la categoría 'Lighting'. Ordena por unit_price descendente y luego por product_id ascendente.
- Lee de la tabla
productspendiente - Muestra exactamente
product_idnameunit_pricependiente - 5 filas, ordenadas como se pidependiente
Paso 2 de 3. Desde products, devuelve product_id, name, category y launched_on de los 8 productos activos lanzados más recientemente. Ordena por launched_on descendente y luego por product_id descendente.
- Lee de la tabla
productspendiente - Muestra exactamente
product_idnamecategorylaunched_onpendiente - 8 filas, ordenadas como se pidependiente
Paso 3 de 3. Desde products, toma los productos activos con precio menor a 40, ordenados por unit_price ascendente y luego por product_id ascendente, y devuelve las filas 7 a 12 de esa lista (la segunda franja de 6). Columnas: product_id, name, unit_price.
- Lee de la tabla
productspendiente - Muestra exactamente
product_idnameunit_pricependiente - 6 filas, ordenadas como se pidependiente
Paso 1 · 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.
Paso 2 · 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.
Paso 3 · 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 Ashley, 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
Cada franja de la página de inicio es una lista top N, lo que implica tres decisiones cada vez: qué filas califican, cómo ordenarlas y cuántas conservar. El orden de las cláusulas importa:
SELECT ...
FROM products
WHERE ... -- 1. which rows qualify
ORDER BY ... -- 2. sort, with a tie-breaker
LIMIT ... OFFSET ...; -- 3. how many, starting where
La base de datos filtra primero, luego ordena y después corta. Así que “los 5 productos de Lighting más caros” no
es “los 5 productos más caros y luego quedarse con los de Lighting”. Si ordenaras todos los productos y
limitaras antes de filtrar, podrías terminar con cero filas de Lighting. El orden de las cláusulas de SQL hace lo
correcto siempre que la condición esté en WHERE.
Paso 1: la iluminación más cara
Filtra los productos activos de Lighting, ordena por precio descendente y conserva 5. El desempate
product_id ASC importa si dos lámparas comparten precio en la posición 5.
Paso 2: los lanzamientos más nuevos
launched_on es un DATE, y varios productos pueden lanzarse el mismo día, así que los empates son probables.
product_id DESC los desempata, una opción razonable porque los ID más altos se crearon después. En un ticket
real, di qué desempate usaste para que Ashley no se lleve una sorpresa.
Paso 3: la segunda franja
La franja muestra 6 artículos, y Ashley quiere la segunda, así que salta 6 y toma 6. Aplica el filtro de precio
antes de paginar. Un producto de exactamente $40 no es “menor a 40”, así que < 40 es lo correcto.
Productos inactivos
Las tres franjas filtran por is_active. Los productos descontinuados nunca deberían promocionarse, y olvidar
la bandera es una de las razones más comunes por las que una página de inicio enlaza a una página sin stock. Cuando construyas cualquier
lista de cara al cliente, pregúntate si hay que excluir artículos inactivos u ocultos.
Revisa tu propio trabajo
Antes de enviar resultados como estos, dedica diez segundos a comprobaciones de sentido común:
- ¿El paso 1 muestra solo Lighting y los precios van bajando?
- ¿El paso 2 muestra solo productos activos, con las fechas bajando?
- ¿La primera fila del paso 3 cuesta al menos lo mismo que la sexta fila de la primera franja?
A los entrevistadores les encantan los candidatos que revisan su resultado sin que se lo pidan. En el trabajo, es lo que mantiene tu nombre fuera del hilo de “¿quién envió esto?”.
Errores comunes
- Olvidar
DESC.ORDER BY unit_priceordena del más barato al más caro, así que el “top 5” se vuelve las 5 lámparas más baratas. - Paginar con el offset equivocado. La segunda franja de 6 es
LIMIT 6 OFFSET 6.OFFSET 7se salta un producto yOFFSET 1repite cinco productos de la primera franja. - Omitir el desempate. Sin
product_iden el ORDER BY, dos productos empatados en el punto de corte pueden intercambiar lugares entre ejecuciones, y la franja cambia sin motivo. - Escribir
unit_price <= 40para “menos de $40”. Un producto de exactamente $40 no está por debajo de 40; usa< 40.
En SQL Server
Los pasos 1 y 2 se convierten en SELECT TOP 5 ... y SELECT TOP 8 ..., el paso 3 usa
OFFSET 6 ROWS FETCH NEXT 6 ROWS ONLY, e is_active es un BIT, así que el filtro se lee
WHERE is_active = 1. Las claves de ordenamiento y los desempates se mantienen igual.
¡Linterna encendida!
Practicaste: order bylimitoffsettie breakerwhere
- Resuelto
- Sin pistas
- Al primer intento
