La solicitud

De Laura Bennett, Directora de Finanzas
Tu objetivo
Paso 1 de 3. Devuelve una fila con lines (todas las líneas de l), lines_without_cost (líneas cuyo unit_cost es NULL), net_sales (todo el net), net_sales_without_cost (net en las líneas sin costo) y coverage_pct (net en las líneas con costo × 100 / todo el net). Redondea el dinero y el porcentaje a 2.
- Lee de la tabla
productspendiente - Lee de la tabla
orderspendiente - Muestra exactamente
lineslines_without_costnet_salesnet_sales_without_costcoverage_pctpendiente
Paso 2 de 3. Conserva solo las líneas con unit_cost. Devuelve category, net_sales, cogs, gross_margin (net_sales − cogs) y gross_margin_pct (gross_margin × 100 / net_sales), todas redondeadas a 2, ordenado por gross_margin de mayor a menor.
- Lee de la tabla
productspendiente - Lee de la tabla
orderspendiente - Muestra exactamente
categorynet_salescogsgross_margingross_margin_pctpendiente
Paso 3 de 3. Conserva solo las líneas con unit_cost. Devuelve category, gross_margin_pct, refunds, contribution (net_sales − cogs − refunds) y contribution_pct (contribution × 100 / net_sales), todas redondeadas a 2, ordenado por contribution_pct de mayor a menor.
- Lee de la tabla
productspendiente - Lee de la tabla
orderspendiente - Muestra exactamente
categorygross_margin_pctrefundscontributioncontribution_pctpendiente
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 Laura, 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 |
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 |
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 |
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
Un P&L en tres bloques
Un P&L por categoría para una revisión tiene una forma fija: qué cubren los números, margen bruto y contribución después de los costos variables que puedes medir. Cada paso de este Desafío final es un bloque, todos sobre 2025.
Paso 1: primero la cobertura
Nueve productos no tienen costo unitario. Sus líneas no pueden tener margen, así que cada cifra de margen cubre menos que todas las ventas. Antes de mostrar cualquier margen, di cuánto cubre:
SUM(net) FILTER (WHERE unit_cost IS NOT NULL) * 100.0 / SUM(net)
FILTER restringe un agregado a algunas filas mientras los demás siguen viéndolas todas, así que
una sola consulta da el total, la parte sin cubrir y la proporción.
Paso 2: margen bruto por categoría
El mismo cálculo del nivel 1, ahora en SQL sobre un año. Filtra a las líneas con costo, agrupa por
categoría y divide sumas: SUM(net - cogs) * 100.0 / SUM(net). Ordena por dólares de margen, porque
la primera pregunta en una revisión es de dónde viene el dinero.
Paso 3: contribución
Resta también los reembolsos, como en el nivel 2. Una categoría con buen margen bruto y muchas devoluciones puede terminar por debajo de una con un margen algo menor y pocas devoluciones. Esta vez ordena por contribución %: la pregunta cambió a “dónde deja más un dólar de ventas”.
Leer la tabla completa
Los tres bloques juntos cuentan una historia que ningún número solo cuenta. Outdoor es la categoría más grande en ventas, en dólares de margen y en dólares de contribución, y la más débil por dólar una vez que se cuentan las devoluciones. Kitchen es lo contrario: más pequeña, y la más eficiente. Ambas afirmaciones van en la revisión, junto a la nota al pie de cobertura.
Errores comunes
- Dejar las líneas sin costo en el paso 2.
cogses NULL en ellas;SUMignora los NULL, así que sus ventas cuentan como margen puro. - Dividir entre el total equivocado. La contribución % divide entre las ventas netas de la propia categoría, no entre el total de la tienda.
- Ordenar por una columna y llamarla ganadora. Los dólares y las tasas responden preguntas distintas.
¡Linterna encendida!
Practicaste: gross margincontribution margincoveragerefundsfilterreporting
- Resuelto
- Sin pistas
- Al primer intento
