Size: a a a

pgsql – PostgreSQL

2020 June 13

Ð

Ð in pgsql – PostgreSQL
select unit_id, sum(value) from t group by unit_id - и все, зачем еще что-то делать тут?! исключить дубли - значит сначала сделать дистинкт и все
источник

2_

2flower _ in pgsql – PostgreSQL
этот цикл выполняется 50000 раз-это просто нерационально.
источник

TS

Tagil Steel in pgsql – PostgreSQL
2flower _
вам нужно id=any(state.ids)
Действительно... Спасибо... Протормозил...
источник

2_

2flower _ in pgsql – PostgreSQL
Tagil Steel
Действительно... Спасибо... Протормозил...
вся ваша функция лишняя, прислушайтесь что вам говорят.
источник

2_

2flower _ in pgsql – PostgreSQL
это не те дроиды, которых вы ищете. :)
источник

Д

Диман in pgsql – PostgreSQL
)))))
источник

TS

Tagil Steel in pgsql – PostgreSQL
Господа, дольшое спасибо, что указали на такую простую вещь! Теперь выполняется за 0.8 секунды, что уже хорошо.
Но насчет лишней функции - не уверен...
источник

Ð

Ð in pgsql – PostgreSQL
попробуй, может будет вообще 0.05 сек
источник

Д

Диман in pgsql – PostgreSQL
Вроде ещё если in юзать то индекс будет юзать.
источник

TS

Tagil Steel in pgsql – PostgreSQL
SELECT jsonb_build_object(
              'total',
MAX(sum) FILTER ( WHERE grouping = 15 ),
              'days',
MAX(dayCnt) FILTER ( WHERE grouping = 15 ),
              'items',
MAX(itemCnt) FILTER ( WHERE grouping = 15 ),
              'sales',
MAX(saleCnt) FILTER ( WHERE grouping = 15 ),
              'products',
MAX(productCnt) FILTER ( WHERE grouping = 15 ),
              'buyers',
MAX(buyerCnt) FILTER ( WHERE grouping = 15 ),
              'catalogs',
MAX(catalogCnt) FILTER ( WHERE grouping = 15 )
          ) as summary,
jsonb_agg(jsonb_build_object(
       'date', date,
       'total', sum,
       'itemCnt', itemCnt,
       'saleCnt', saleCnt,
       'productCnt', productCnt,
       'products', products,
       'buyerCnt', buyerCnt,
       'buyers', buyers,
       'catalogCnt', catalogCnt,
       'catalogs', catalogs
   ) ORDER BY date) FILTER ( WHERE grouping = 7) AS days,
jsonb_agg(jsonb_build_object(
       'catalog', catalog,
       'total', sum,
       'itemCnt', itemCnt,
       'saleCnt', saleCnt,
       'productCnt', productCnt,
       'products', products,
       'buyerCnt', buyerCnt,
       'buyers', buyers
   ) ORDER BY sum DESC, catalog_id) FILTER ( WHERE grouping = 11) AS catalogs,
jsonb_agg(jsonb_build_object(
       'product', product,
       'total', sum,
       'itemCnt', "itemCnt",
       'saleCnt', saleCnt,
       'buyerCnt', buyerCnt,
       'buyers', buyers,
       'catalogCnt', catalogCnt,
       'catalogs', catalogs
   ) ORDER BY sum DESC, product_id) FILTER ( WHERE grouping = 13) AS products,
jsonb_agg(jsonb_build_object(
       'buyer', buyer,
       'total', sum,
       'itemCnt', itemCnt,
       'saleCnt', saleCnt,
       'productCnt', productCnt,
       'products', products,
       'catalogCnt', catalogCnt,
       'catalogs', catalogs
   ) ORDER BY sum DESC, buyer_id) FILTER ( WHERE grouping = 14) AS buyers
источник

Ð

Ð in pgsql – PostgreSQL
Диман
Вроде ещё если in юзать то индекс будет юзать.
ин это сахар для эни, насколько я знаю
источник

Д

Диман in pgsql – PostgreSQL
Ð
ин это сахар для эни, насколько я знаю
Нене. Чо-то такое было.
источник

TS

Tagil Steel in pgsql – PostgreSQL
Это, так сказать, младший брат того запроса...
источник

TS

Tagil Steel in pgsql – PostgreSQL
FROM (

   SELECT "cc"."catalog_id" AS "catalog_id",
          "c"."id" AS "buyer_id",
          "p"."id" AS "product_id",
         
date_trunc('day', s.created) AS "date",
          CASE WHEN p.id IS NOT NULL THEN
                                                                                                                                                                                                                             
jsonb_build_object('id', p.id, 'type_id', p.type_id, 'options',p.options)
              END AS product,
          CASE WHEN c.id IS NOT NULL THEN
               
jsonb_build_object('id', c.id, 'options',c.options)
           END AS buyer,
          CASE WHEN cc.catalog_id IS NOT NULL THEN
           
jsonb_build_object('id', cc.catalog_id, 'name', cat.name, 'options', cat.options)
           END AS catalog,
           
COALESCE(jsonb_agg(DISTINCT p.id), '[]') AS "products",
           
COALESCE(jsonb_agg(DISTINCT c.id), '[]') AS "buyers",
           
COALESCE(jsonb_agg(DISTINCT cc.catalog_id), '[]') AS "catalogs",

           
COUNT(DISTINCT si) AS "itemCnt",
           
count(DISTINCT s.id) AS saleCnt,
           
count(DISTINCT p.id) AS "productCnt",

           
count(DISTINCT c.id) AS "buyerCnt",
           
count(DISTINCT cc.catalog_id) AS "catalogCnt",
           
count(DISTINCT date_trunc('day', s.created)) AS "dayCnt",


   common.
sum_distinct(
               
CAST((si.price #>> '{value}') AS numeric) *
               
CAST((si.quantity #>> '{value}') AS numeric) *
               CASE WHEN
CAST(si.options #>> '{deliveries}' AS numeric) > 0
                        THEN
CAST(si.options #>> '{deliveries}' AS numeric)
                    ELSE 1
                   END,
               si.id) sum,
         
grouping(date_trunc('day', s.created), catalog_id, p.id, c.id) AS "grouping"
   FROM userspace_10."sale_item" "si"
       LEFT JOIN userspace_10."sale" "s" ON s.id=si.sale_id AND s.status_id >= 32 AND s.status_id < 255
       LEFT JOIN userspace_10."client" "c" ON c.id=s.buyer_id
       LEFT JOIN userspace_10."product" "p" ON p.id=si.product_id
       LEFT JOIN userspace_10."product_category_mapping" "pcm" ON pcm.product_id=p.id AND pcm.disabled=false
       LEFT JOIN userspace_10."catalog_category" "cc" ON cc.id=pcm.category_id
       LEFT JOIN userspace_10."catalog" "cat" ON cat.id=cc.catalog_id
   WHERE ("s"."id" IS NOT NULL) AND ("s"."deleted"=FALSE)
     AND ("si"."deleted"=FALSE) AND ("si"."created" BETWEEN '2020-03-01 00:00:00.00000' AND '2020-03-31 23:59:59.999999')
   GROUP BY GROUPING SETS (
           (),
           (date),
           ("c"."id", "c"."options"),
           ("p"."id", "p"."type_id", "p"."options"),
           (catalog_id, "cat"."name", "cat"."options")
       )

   ) "t";
источник

Ð

Ð in pgsql – PostgreSQL
если что-то выглядит сложно, скорее всего это неправильно :)
источник

Д

Диман in pgsql – PostgreSQL
*упал в обморок
источник

TS

Tagil Steel in pgsql – PostgreSQL
Ð
если что-то выглядит сложно, скорее всего это неправильно :)
Если делать так, как советуют, то будет еще сложнее...
источник

Ð

Ð in pgsql – PostgreSQL
ну это вряд ли
источник

Д

Диман in pgsql – PostgreSQL
Никогда не юзайте так правую дату в интервале. Делайте месяц плюс к дате начала.
источник

Ð

Ð in pgsql – PostgreSQL
как минимум, получить жсон с суммами по каждой единице измерения в таблице можно одной строчкой штатными средствами
источник