La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
Desde marketing_spend, devuelve una fila por channel con: channel, spend_days (número de filas), total_spend (suma de amount, redondeada a 2) y avg_daily_spend (promedio de amount, redondeado a 2).
- Lee de la tabla
marketing_spendpendiente - Muestra exactamente
channelspend_daystotal_spendavg_daily_spendpendiente - 3 filaspendiente
Tu consulta
Cargando el editor…
Solución de referencia
| 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 |
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.
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 |
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 |
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 |
La lección
Una fila por canal con unos pocos totales es la forma más común de una consulta de agregación. Esta se ejecuta
sobre marketing_spend, que tiene una fila por día y por canal de pago.
Un grupo por canal, un valor por agregado
SELECT
channel,
COUNT(*) AS spend_days,
ROUND(SUM(amount), 2) AS total_spend
FROM marketing_spend
GROUP BY channel;
Email tiene 1,092 días y $100,187.71 en total, social 1,093 días y $345,764.76, y paid 1,091 días
y $888,774.13. Cada columna de la lista de SELECT está en el GROUP BY (channel) o dentro de un
agregado. Esa es la regla que mantiene válida una consulta agrupada.
Deja que el conteo revise los datos
Del 2023-01-01 al 2025-12-31 hay 1,096 días. Ningún canal llega a esa cifra: a paid le faltan 5 días,
a email 4 y a social 3, doce en total. Las notas de los datos las llaman caídas de seguimiento. Nadie pidió una
revisión de calidad de datos, pero COUNT(*) te dio una gratis, y cambia cómo leer los promedios:
AVG(amount) es el promedio sobre los días con datos, no sobre todos los días del calendario. Si los días faltantes
de verdad tuvieron gasto, el total real es un poco más alto que el reportado. Menciónalo en una línea cuando envíes
la tabla.
Errores comunes
- Seleccionar
channelsinGROUP BY channel. DuckDB reporta que la columna debe aparecer en la cláusula GROUP BY o usarse en una función de agregación. - Redondear dentro de la suma,
SUM(ROUND(amount, 2)). Redondea el número final una sola vez. - Llamar al promedio “por día” sin decir que omite los días faltantes.
- Usar
COUNT(DISTINCT spend_date)y esperar una respuesta distinta. Hay una fila por canal y día, así que da los mismos conteos aquí. Solo difiere cuando una tabla puede tener varias filas para el mismo día, algo que conviene comprobar una vez en cualquier tabla nueva. - Comparar canales solo por los totales. Paid gasta casi nueve veces más que email en total, y el promedio diario muestra la misma brecha, pero ningún número dice qué canal se gana su presupuesto. Eso requiere ingresos o conversiones junto al gasto.
En SQL Server
Esta consulta se ejecuta sin cambios, porque amount es un decimal. Una diferencia que conviene conocer: AVG de una
columna INT devuelve un INT allí, así que un promedio de números enteros pierde sus decimales. Convierte primero:
SELECT device, AVG(CAST(pages_viewed AS decimal(10, 2))) AS avg_pages
FROM web_sessions
GROUP BY device; ¡Linterna encendida!
Practicaste: group bycountsumavground
- Resuelto
- Sin pistas
- Al primer intento
