Что такое CTE (WITH)? Когда применять в Go?

Ответ

CTE - именованное временное множество: WITH name AS (SELECT ...) SELECT ... FROM name. Улучшает читаемость, позволяет рекурсию (WITH RECURSIVE). В Go передают один большой запрос с WITH; параметры - через плейсхолдеры. Удобно для многошаговых выборок и рекурсивных структур (деревья).

q := "WITH recent AS (SELECT * FROM orders WHERE created_at > $1) SELECT u.name, COUNT(r.id) FROM users u LEFT JOIN recent r ON u.id = r.user_id GROUP BY u.id, u.name"
rows, err := db.QueryContext(ctx, q, since)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.