вычисление продукта строк

WMix

герр M:)ller
Партнер клуба
выучил новую формулу, может кому понадобится
SQL:
select round(exp(sum(ln(qty)))) as product
from (
  select 5 as qty
  union
  select 4 as qty
  union
  select 3 as qty
) as x
5*4*3 = 60
 

ksnk

прохожий
Это если нужно считать групповой mul, а есть только sum с щепоткой арифметики ?
round там не лишний ? :)
 

fixxxer

К.О.
Партнер клуба
Это сработает только если все числа положительные.

Вообще уже везде есть CTE.
 

fixxxer

К.О.
Партнер клуба
а как это на cte написать?
recursive cte, правда PK понадобится

хотя можно и без него, только придется row_number() через window funcitons еще добавить

если все числа гарантированно положительные, через exp проще конечно.
 

ksnk

прохожий
cte ненужен.
SQL:
select if(mod(sum(sgn),2)=1,-1,1)*round(exp(sum(ln(qty)))) as product
from (
  select if(-5<0,1,0) as sgn, abs(-5) as qty
  union
  select if(4<0,1,0) as sgn,abs(4) as qty
  union
  select if(3<0,1,0) as sgn,abs(3) as qty
) as x
🤪
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
не пойму, какая задача решается? произведение всех значений в колонке выборки?
SQL:
SET @m = CAST(1 AS DECIMAL[30,15]);
SELECT @m:[email protected] * `my_column` FROM ...;
 

WMix

герр M:)ller
Партнер клуба
не пойму лучше ли это, при условии что в контексте php пишем
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нет округлений и потери точности при работе с дробными числами,
элементарный наглядный код в 2 строки,
явно быстрее вычисления логарифмов

чем он может быть не лучше ... тем, что без гамака, и что для postgres будет другой синтаксис
 

WMix

герр M:)ller
Партнер клуба
чем он может быть не лучше
он состоит из 2х запросов и переменной которые явно или не явно будут вписаны в твою модель
явно быстрее вычисления логарифмов
да брось ты, это floats, сопроцессор уже давно внутри, log2 это базавая команда
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ты пытаешься сказать, что у выражения mod(sum(sgn),2)=1,-1,1)*round(exp(sum(ln(qty)))) нагрузка на процессор равная с выражением $x*=N ? :)

может, я чего не понимаю, но первый запрос с декларацией переменной на что влияет?
и не в модель, а в persistance слой
 

WMix

герр M:)ller
Партнер клуба
количество не бывает нулевым или отрицательным, формула действительно имеет смысл при положительных результатах, но за 20 лет мне не понадобилась, до задачки: "на палете 30 ящиков, в ящиках по 10шт, сколько штук в 5 грузовиках" которую решил этим путем мой коллега

элегантно между прочим
 
Сверху