Есть таблица с набором чисел. Выведите (можно через select) произведение этих чисел

В PostgreSQL произведение можно вычислить рекурсивным CTE с аккумулятором numeric. Это сохраняет знак и корректно обрабатывает нули без логарифмов.

Короткий ответ

Что ответить на собеседовании

В PostgreSQL произведение можно вычислить рекурсивным CTE с аккумулятором numeric. Это сохраняет знак и корректно обрабатывает нули без логарифмов.

Подробный разбор

Ответ с пояснениями

Условие

Есть таблица с набором чисел. Выведите (можно через select) произведение этих чисел

[phone]

Ответ

В PostgreSQL произведение можно вычислить рекурсивным CTE с аккумулятором numeric. Это сохраняет знак и корректно обрабатывает нули без логарифмов.

Предположим, числа находятся в numbers(num):

WITH RECURSIVE ordered AS (
    SELECT ROW_NUMBER() OVER (ORDER BY num) AS rn,
           num::numeric AS num
    FROM numbers
    WHERE num IS NOT NULL
), product(i, value) AS (
    SELECT 0::bigint, 1::numeric
    UNION ALL
    SELECT o.rn, p.value * o.num
    FROM product p
    JOIN ordered o ON o.rn = p.i + 1
)
SELECT value AS product
FROM product
ORDER BY i DESC
LIMIT 1;

NULL игнорируются, пустой набор даёт 1. Это учебное решение; для больших таблиц эффективнее специализированный агрегат. При ограниченных числовых типах учитывают переполнение, а при floating point — погрешность.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее