La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
A partir de customers, devuelve referral_source (con NULL mostrado como 'unknown'), customers (número de clientes) y pct_of_customers (clientes dividido entre el número total de clientes, por 100, redondeado a 1). Ordena por customers descendente.
- Lee de la tabla
customerspendiente - Muestra exactamente
referral_sourcecustomerspct_of_customerspendiente - 9 filas, ordenadas como se pidependiente
Tu consulta
Cargando el editor…
Solución de referencia
| customer_id | first_name | last_name | city | |
|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle |
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.
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 |
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 NULL significa “no registrado”. En un desglose, o desaparece o aparece como una etiqueta vacía que
nadie puede explicar. COALESCE arregla el problema de la etiqueta.
COALESCE para etiquetas
COALESCE(a, b, c) devuelve el primer argumento que no es NULL:
SELECT
COALESCE(referral_source, 'unknown') AS referral_source,
COUNT(*) AS customers
FROM customers
GROUP BY 1
ORDER BY customers DESC;
En Harbor & Pine, unknown es el grupo más grande con 666 clientes, por delante de search con 415.
Ocultar un tercio de la base de clientes hace que todas las demás participaciones parezcan mayores de lo
que son. Lo mismo pasa con los cupones: de los 4,295 pedidos completados de 2025, 3,678 no tienen cupón, y
COALESCE(coupon_code, 'none') lo convierte en una fila que un lector entiende.
También puedes encadenar alternativas: COALESCE(nickname, first_name, 'Customer') toma el primer valor
que existe.
Cómo los NULL cambian los agregados
Los agregados se saltan los NULL, y los conteos se ven distintos según lo que cuentes:
| expresión | resultado |
|---|---|
COUNT(*) |
2,018 (todas las filas) |
COUNT(referral_source) |
1,352 (solo valores no NULL) |
COUNT(DISTINCT referral_source) |
8 |
COUNT(DISTINCT COALESCE(referral_source, 'unknown')) |
9 |
Elige el que corresponda a la pregunta, y usa COUNT(*) cuando cuentes filas de un grupo.
No uses COALESCE con 0 en los números
Las etiquetas se pueden rellenar sin riesgo. Los números, normalmente no. Nueve productos no tienen
unit_cost. El costo promedio de Furniture es 308.11 sobre los 15 productos que lo tienen. Con
AVG(COALESCE(unit_cost, 0)) baja a 231.08, porque cinco productos ahora cuestan $0. Un costo que falta
es desconocido, no gratis. Déjalo en NULL para que AVG lo ignore, y reporta cuántos valores faltaban
junto al promedio.
Errores comunes
- Contar la columna en un grupo NULL.
COUNT(referral_source)devuelve 0 para el grupo NULL. - Tipo incompatible.
COALESCE(unit_cost, 'n/a')falla: todos los argumentos deben tener un tipo compatible. Convierte antes el número a texto si de verdad quieres una etiqueta. - Agrupar por la columna en bruto. Agrupa por la misma expresión
COALESCE, o la etiqueta y el grupo no coincidirán.
En SQL Server
COALESCE funciona igual. T-SQL también tiene ISNULL(referral_source, 'unknown'), que toma exactamente
dos argumentos y devuelve el tipo del primero, así que ISNULL sobre una columna corta NVARCHAR(5)
puede cortar una etiqueta más larga. Prefiere COALESCE para código portable.
SELECT ISNULL(referral_source, 'unknown') AS referral_source, COUNT(*) AS customers
FROM customers
GROUP BY ISNULL(referral_source, 'unknown'); ¡Linterna encendida!
Practicaste: coalescenulldata cleaningpercent of total
- Resuelto
- Sin pistas
- Al primer intento
