Мы понимаем, что, скорее всего, теперь вы будете генерировать SQL с помощью Claude (или другой LLM), но вам как минимум стоит понимать, что именно запрашивать.
Матрица подзапросов в Postgres
✔️ Что: subselect (подзапрос)
Когда: select внутри select
Пример:
SELECT
sum(qty) AS total_qty, sku
FROM product_orders
WHERE
sku IN (
SELECT sku FROM products WHERE sale_price <= price * .75
)
GROUP BY sku;
✔️Что: CTE
Когда: подзапросы с именованными частями
Пример:
WITH huge_savings AS (
SELECT sku
FROM products
WHERE sale_price <= price * .75
)
SELECT sum(qty) AS total_qty, sku
FROM product_orders
JOIN huge_savings USING (sku)
GROUP BY sku;
✔️ Что: materialized view (материализованное представление)
Когда: сохранённый запрос в виде таблицы
Пример:
CREATE MATERIALIZED VIEW recent_product_sales AS
SELECT p.sku, SUM(po.qty) AS total_quantity
FROM products p
JOIN product_orders po ON p.sku = po.sku
JOIN orders o ON po.order_id = o.order_id
WHERE o.status = 'Shipped'
GROUP BY p.sku
ORDER BY 2 DESC;
✔️ Что: window functions (оконные функции)
Когда: агрегации по подмножествам данных
Пример:
SELECT
sku,
SUM(qty) OVER (PARTITION BY sku)
FROM product_orders
LIMIT 10;
✔️ Что: lateral join
Когда: коррелированный подзапрос
Пример:
SELECT accounts.id, last_purchase.*
FROM accounts
INNER JOIN LATERAL (
SELECT *
FROM purchases
WHERE account_id = accounts.id
ORDER BY created_at DESC
LIMIT 1
) AS last_purchase ON true;
👉 @SQLPortal
