La solicitud

De Megan Collins, Directora de Ventas
Tu objetivo
Crea product_stage con product_id, name, category y unit_price de los productos activos. Añade una columna price_tier VARCHAR con DEFAULT 'standard' y fíjala en 'premium' donde unit_price >= 500. Añade una columna units_dec INTEGER con DEFAULT 0 y rellénala con las unidades de cada producto (suma de quantity) en pedidos completados realizados en diciembre de 2025, líneas con quantity > 0. Devuelve category, price_tier, products (conteo), units_dec (suma) y unsold_products (productos cuyo units_dec es 0), ordenado por category y luego por price_tier.
- Lee de la tabla
productspendiente - Lee de la tabla
orderspendiente - Muestra exactamente
categoryprice_tierproductsunits_decunsold_productspendiente
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 Megan, 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 |
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 |
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
ALTER TABLE cambia la estructura de una tabla una vez que existe: añade una columna, elimina otra,
renombra una. Los analistas lo usan sobre todo en sus propias tablas de preparación, para enriquecerlas
paso a paso.
ADD COLUMN con un DEFAULT
ALTER TABLE product_stage ADD COLUMN price_tier VARCHAR DEFAULT 'standard';
UPDATE product_stage SET price_tier = 'premium' WHERE unit_price >= 500;
La nueva columna aparece en todas las filas existentes con el valor por defecto. Luego un solo UPDATE cambia las excepciones. De los 108 productos activos, 15 cuestan $500 o más y pasan a ser premium: 9 de Furniture y 6 de Outdoor.
Sin DEFAULT, la nueva columna sería NULL en todas partes hasta que la rellenes. A veces eso es lo que
quieres (“todavía no se sabe”), pero para los conteos es una trampa, como muestra la siguiente columna.
Rellena una columna desde otra tabla: UPDATE … FROM
ALTER TABLE product_stage ADD COLUMN units_dec INTEGER DEFAULT 0;
UPDATE product_stage AS s
SET units_dec = u.units
FROM (SELECT i.product_id, SUM(i.quantity) AS units
FROM order_items AS i JOIN orders AS o ON o.order_id = i.order_id
WHERE o.status = 'completed' AND i.quantity > 0
AND o.order_date >= '2025-12-01' AND o.order_date < '2026-01-01'
GROUP BY i.product_id) AS u
WHERE u.product_id = s.product_id;
UPDATE ... FROM une la tabla que se actualiza con otra fuente; el WHERE es la condición del join. Los
productos sin ninguna línea en diciembre no tienen coincidencia, así que el UPDATE los salta y conservan el
0 por defecto. En el resultado, 5 productos activos no vendieron nada en diciembre de 2025: un producto
premium de Furniture y cuatro de Outdoor (dos premium, dos standard), lo que encaja con una gama de
exterior en invierno.
Si la columna hubiera sido NULL para esos cinco, SUM seguiría siendo correcto, pero
COUNT(CASE WHEN units_dec = 0 THEN 1 END) reportaría 0 productos sin vender. Un valor por defecto de 0
expresa un hecho (“vendió cero”), donde NULL dice “desconocido”.
Otros cambios con ALTER TABLE
ALTER TABLE t DROP COLUMN celimina una columna.ALTER TABLE t RENAME COLUMN a TO brenombra una.ALTER TABLE t ALTER COLUMN c TYPE DECIMAL(10, 2)cambia un tipo (sintaxis de DuckDB y Postgres).ALTER TABLE t RENAME TO t2renombra la tabla.
En las tablas compartidas, los cambios de estructura rompen toda consulta que use el nombre o el tipo antiguo, así que pasan por quien es dueño de la tabla. En tus propias tablas de preparación, cambia con libertad.
Errores comunes
- Añadir una columna sin valor por defecto y luego contar ceros que en realidad son NULL.
- Olvidar la condición del join en
UPDATE ... FROM. Sin ella, cada fila se empareja con cada fila de la subconsulta y recibe un valor arbitrario. - Poner la lógica de
price_tieren dos lugares (el UPDATE y los informes posteriores) de modo que se desincronicen. Guárdala una sola vez en la tabla de preparación.
En SQL Server
Añadir una columna no lleva la palabra clave COLUMN, y un valor por defecto suele ser la hora actual:
ALTER TABLE dbo.ProductStage ADD ImportedAt DATETIME2 DEFAULT GETDATE();
Las filas existentes reciben NULL a menos que añadas WITH VALUES. T-SQL también usa UPDATE s SET ... FROM dbo.ProductStage AS s JOIN (...) AS u ON ..., con el join escrito en el FROM.
¡Linterna encendida!
Practicaste: alter tableadd columndefaultupdate from
- Resuelto
- Sin pistas
- Al primer intento
