Una respuesta JSON de API, en SQL en SQL
Una consulta, un documento: la forma que el llamador pidió, armada donde viven los datos.
WITH item_docs AS (
SELECT
i.order_id,
JSON_OBJECT(
'sku', i.sku,
'name', p.name,
'quantity', i.quantity,
'line_total', ROUND(i.quantity * p.price, 2)
) AS item
FROM order_items AS i
JOIN products AS p
ON p.sku = i.sku
),
order_docs AS (
SELECT
o.customer_id,
JSON_OBJECT(
'id', o.id,
'status', o.status,
'total', o.total,
'placed_at', o.placed_at,
'items', JSON_GROUP_ARRAY(JSON(d.item))
) AS document
FROM orders AS o
JOIN item_docs AS d
ON d.order_id = o.id
GROUP BY o.id
)
SELECT
JSON_OBJECT(
'generated_at', DATETIME('now'),
'customers', JSON_GROUP_ARRAY(
JSON_OBJECT(
'customer_id', customer_id,
'orders', JSON(document)
)
)
) AS response
FROM order_docs;
Cómo funciona
- Construye los objetos hoja en una CTE y luego agrégalos un nivel arriba.
json_group_arraydentro dejson_objectanida un arreglo en un registro.- El resultado es una sola fila y una sola columna que el llamador devuelve tal cual.
Palabras clave y builtins usados aquí
ASBYFROMGROUPJOINONSELECTWITH
El intento, en números
- Líneas
- 39
- Caracteres a escribir
- 661
- Tokens
- 168
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 106 segundos.
Paso 5 de 5 en Escribir JSON; paso 8 de 14 en JSON y búsqueda.