typestar

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

  1. Construye los objetos hoja en una CTE y luego agrégalos un nivel arriba.
  2. json_group_array dentro de json_object anida un arreglo en un registro.
  3. El resultado es una sola fila y una sola columna que el llamador devuelve tal cual.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 5 de 5 en Escribir JSON; paso 8 de 14 en JSON y búsqueda.

← Anterior Siguiente →