La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
Para los pedidos contabilizados de 2025 (status IN ('completed', 'refunded'), quantity > 0, order_date >= '2025-01-01' AND order_date < '2026-01-01') que usaron cupón (coupon_code IS NOT NULL), devuelve una fila por coupon_code con orders (pedidos distintos), gross_sales, discount y share_of_discounts_pct (el descuento del código × 100 / el descuento de todos los cupones). Redondea el dinero y la participación a 2 decimales. Ordena por discount descendente y luego por coupon_code.
- Lee de la tabla
orderspendiente - Lee de la tabla
order_itemspendiente - Muestra exactamente
coupon_codeordersgross_salesdiscountshare_of_discounts_pctpendiente
Tu consulta
Cargando el editor…
Solución de referencia
| order_id | customer_id | order_date | status | channel |
|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Jordan, y por qué
Tablas
Datos de la tienda Harbor & Pine, listos para consultar.
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 |
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 |
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
La tasa no es el costo
Cada cupón de Harbor & Pine tiene una tasa fija: BFCM25 descuenta 25 %, WELCOME10 10 %. La tasa te dice
qué tan generoso es un código. No te dice cuánto costó, porque el costo es la tasa × las ventas sobre las
que se usó. Un código es caro cuando es generoso y popular.
quantity * unit_price * discount_pct / 100 -- discount dollars on one line
Sumado por código, eso es el costo en dólares. Marketing compara códigos por tasa; finanzas los compara por dólares. Este nivel le da a cada uno su número.
Participación en el total con una ventana
Para decir “BFCM25 es el 30 % del costo de todos los cupones”, cada fila necesita el total de todos los códigos. Una función de ventana sobre el resultado agrupado lo da sin una segunda consulta:
SUM(SUM(discount_expr)) OVER ()
El SUM interno es el descuento del grupo; el SUM ... OVER () externo suma esas sumas de grupo en todas
las filas. Divide la primera entre la segunda, multiplica por 100.0 y redondea una sola vez.
Lo que muestra 2025
BFCM25 costó $14,367.33 en 112 pedidos durante un solo fin de semana largo. WELCOME10 costó $10,126.31 en 198 pedidos. SPRING15, HOLIDAY20 y SUMMER15 costaron cada uno entre $7,200 y $8,900. En total, los cupones restaron $47,953.28 a las ventas brutas de 2025, cerca del 2 % de $2.41M.
FREESHIP muestra 79 pedidos y $0 de descuento. Su costo es real, pero es el cargo de envío que la tienda
no cobró, así que vive en orders.shipping_fee. Un informe de cupones que solo lee discount_pct se lo
pierde; dilo en la nota al pie.
El costo es la mitad de la pregunta
La otra mitad es lo que compró el cupón. WELCOME10 atrae clientes nuevos, cuyos pedidos posteriores no llevan descuento. BFCM25 quizá descuenta sobre todo pedidos que la gente habría hecho de todos modos. El costo por código es donde empieza esa conversación, y el valor de vida del cliente del capítulo 2 es donde continúa.
Errores comunes
- Ordenar por tasa. El código de 25 % no es automáticamente el más costoso.
- Olvidar el envío gratis. Una columna de descuento solo contiene descuentos de precio.
- Unir las devoluciones primero. Los descuentos son un número del lado de las ventas; deja los reembolsos fuera de esta consulta.
Nota de entrevista
“¿Cómo medirías si una promoción valió la pena?” Empieza por su costo en dólares, luego los pedidos incrementales y los clientes que adquirió. El costo solo nunca lo decide.
¡Linterna encendida!
Practicaste: discountscouponsshare of totalwindow functions
- Resuelto
- Sin pistas
- Al primer intento
