La solicitud

De Kevin Nguyen, Director de Ingeniería
Tu objetivo
Desde web_sessions, devuelve una fila por año y dispositivo con: year (año de started_at), device, sessions, share_pct (sesiones de ese dispositivo * 100 / todas las sesiones de ese año, redondeado a 2) y conversion_rate_pct (sesiones convertidas * 100 / sessions, redondeado a 2). Ordena por año y luego por dispositivo, ascendente.
- Lee de la tabla
web_sessionspendiente - Muestra exactamente
yeardevicesessionsshare_pctconversion_rate_pctpendiente - 9 filas, ordenadas como se pidependiente
Tu consulta
Cargando el editor…
Solución de referencia
| session_id | customer_id | started_at | device | source |
|---|---|---|---|---|
| 1 | NULL | 2023-01-01 23:02:24 | mobile | paid |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid |
| 3 | NULL | 2023-01-01 16:55:46 | desktop | direct |
| 4 | NULL | 2023-01-01 12:43:28 | mobile | organic |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Kevin, y por qué
Tablas
Datos de la tienda Harbor & Pine, listos para consultar.
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 |
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 |
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
Dos números por segmento
Una tendencia de conversión depende de dos cosas: qué tan bien convierte cada segmento y qué parte del tráfico es cada segmento. La pregunta de Ingeniería necesita ambas, por dispositivo y por año:
- Tasa: sesiones convertidas / sesiones de ese dispositivo.
- Proporción: sesiones de ese dispositivo / todas las sesiones del año.
Tienen denominadores distintos, así que necesitan herramientas distintas en una misma consulta.
Ventana sobre un GROUP BY
La tasa es una agregación normal dentro de cada grupo (year, device). La proporción necesita el
total del año, que es la suma de tres grupos. Una función de ventana sobre el agregado lo da sin una
segunda consulta:
SUM(COUNT(*)) OVER (PARTITION BY year(started_at))
SQL primero agrupa las filas (un COUNT(*) por año y dispositivo), y luego la ventana suma esos
conteos dentro de cada año y pone el total en cada fila de ese año. Divide y tienes la proporción; las
tres proporciones de un año suman 100%.
Qué dice la tabla
El escritorio es el que mejor convierte cada año, entre 3.67% y 4.13%. El móvil es el peor, entre 2.30% y 2.52%, y además es el dispositivo que crece: de 47.82% de las sesiones en 2023 a 57.98% en 2025. La tablet se mantiene cerca del 10% del tráfico.
Así que la tienda está desplazando su tráfico hacia el dispositivo que peor convierte. Aunque todos los dispositivos mejoren, la tasa global recibe menos de esa mejora que cualquier dispositivo por separado. Ten esta tabla presente para el cuestionario de cambio de mezcla más adelante en el capítulo.
Qué recomendar
Para la decisión de Kevin, el tamaño del premio importa más que la brecha por sí sola. El móvil es el segmento más grande y de mayor crecimiento, así que cerrar aunque sea parte de su brecha con el escritorio mueve más conversiones. Ese argumento necesita las dos columnas.
Errores comunes
- Usar el total general como denominador de la proporción. Particiona la ventana por año.
- Comparar conteos brutos de conversiones entre dispositivos. El móvil tiene más conversiones porque tiene más sesiones, no porque convierta bien.
- Reportar tasas sin proporciones, lo que oculta el cambio de mezcla que mueve el total.
¡Linterna encendida!
Practicaste: conversion ratewindow functionsshare of totalsegmentationmix
- Resuelto
- Sin pistas
- Al primer intento
