La solicitud

De Rachel Adams, Líder de Atención al Cliente
Tu objetivo
Desde returns, para las devoluciones cuyo reason es 'damaged' o 'wrong_item', devuelve return_id, returned_on, reason y refund_amount de los 10 reembolsos más grandes. Ordena por refund_amount descendente y luego por return_id ascendente cuando los reembolsos empaten. Devuelve exactamente 10 filas.
- Lee de la tabla
returnspendiente - Muestra exactamente
return_idreturned_onreasonrefund_amountpendiente - 10 filas, ordenadas como se pidependiente
Tu consulta
Cargando el editor…
Solución de referencia
| 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 |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Rachel, y por qué
Tablas
Datos de la tienda Harbor & Pine, listos para consultar.
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 |
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 |
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 |
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 |
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
Una lista top N son tres cláusulas trabajando juntas: filtrar, ordenar, cortar. Usaste las tres en la lista
de precios; aquí se ejecutan sobre una tabla nueva, returns.
Filtrar, ordenar, cortar
SELECT return_id, reason, refund_amount
FROM returns
WHERE reason IN ('damaged', 'wrong_item')
ORDER BY refund_amount DESC, return_id ASC
LIMIT 3;
Los tres primeros son la devolución 802 (damaged, $4,827.00), la devolución 1200 (wrong item, $3,996.00) y la devolución 641 (damaged, $3,318.00). La base de datos aplica los pasos en este orden: WHERE elimina los otros motivos, ORDER BY ordena lo que queda y LIMIT conserva las primeras filas del resultado ordenado. LIMIT sin ORDER BY devuelve “algunas” filas, no las primeras.
ASC es el valor por defecto, así que return_id ASC y return_id a secas son lo mismo. Escribirlo hace que las direcciones
mixtas se lean fácil: el reembolso más grande primero, pero el id más bajo primero entre los empates.
Por qué el desempate importa aquí
Las devoluciones 31 y 317 reembolsaron exactamente $3,198.00. Ambas caben dentro de los diez primeros, pero cuál aparece
primero depende de la base de datos a menos que lo indiques. Si un empate cayera justo en el punto de corte, entre las filas 10 y
11, la base de datos incluso podría elegir una fila distinta cada vez. Una columna única como última clave de ordenamiento, aquí
return_id, elimina la duda.
Errores comunes
- Ordenar de forma ascendente por accidente, lo que da los diez reembolsos más pequeños en lugar de los más grandes.
- Poner LIMIT antes de ORDER BY. SQL espera ORDER BY primero y luego LIMIT, y reporta un error de sintaxis si no es así.
- Filtrar con
reason = 'damaged' OR reason = 'wrong_item'y luego añadir más condiciones AND sin paréntesis. IN lo mantiene seguro. - Leer el resultado sin la columna de ordenamiento. Mantén
refund_amounten la lista de SELECT, para que cualquiera pueda ver de un vistazo que la lista realmente va del más grande al más pequeño.
En SQL Server
SQL Server no tiene LIMIT; pone TOP n justo después de SELECT. TOP 10 WITH TIES también conservaría cualquier
fila extra que empate con la décima:
SELECT TOP 10 return_id, refund_amount
FROM returns
WHERE reason IN ('damaged', 'wrong_item')
ORDER BY refund_amount DESC, return_id ASC; ¡Linterna encendida!
Practicaste: order bydesclimittie breakertop n
- Resuelto
- Sin pistas
- Al primer intento
