【问题标题】:Getting type cast issue when adding up the values from an array (array_agg)将数组中的值相加时出现类型转换问题(array_agg)
【发布时间】:2021-08-29 11:47:21
【问题描述】:

我试图总结 PostgreSQL 中数组中的所有值,尝试了不同的方法,但总是遇到问题 function sum(numeric[]) does not exist。即使我尝试过铸造,但仍然显示出同样的问题。我在这里有什么遗漏吗?

select array_to_json(array_agg(items)) FROM (SELECT SUM(p.total_price) FROM (SELECT 
ARRAY_AGG(cart_items.unit_price) FILTER (where cart_items.type = 2) AS total_price 
from cart inner join cart_items on cart_items.cart_id = cart.id where cart.id = 
40868884) AS p) AS items;

结果是:

                                          array_to_json                                          
-------------------------------------------------------------------------------------------------
[{"total_price":[1.867,1.867,1.867,1.867,1.867,1.21,1.867,1.867,1.56,1.867,1.867,1.867,44]}]

基本上,我想在从数据库中取出列价格后将这些值汇总。

小提琴

http://sqlfiddle.com/#!17/3fdd3/4

【问题讨论】:

  • 你能设置一个 dbfiddle 吗?您的查询没有sum(),所以这似乎是一个奇怪的错误。
  • 其实我已经写了正确的语句,现在我已经更新了 SUM,@GordonLinoff
  • 我添加了小提琴@GordonLinoff

标签: postgresql postgresql-11


【解决方案1】:

如果你想做的是在你的 json "totalprice" 字段中总结价格,那么你可以使用:

select t.*,
       (select sum(price)
        from (select json_array_elements_text(j.el->'total_price')::numeric as price
              from json_array_elements(t.x) j(el)
             ) j
       )
from (select '[{"total_price":[1.867,1.867,1.867,1.867,1.867,1.21,1.867,1.867,1.56,1.867,1.867,1.867,44]}]'::json as x) t 

【讨论】:

  • 嗨@Gordon,谢谢你,实际上我不能把它放在我的查询中,因为实际的查询很大,所以我只需要取一些部分并把它放在这里找到部分,有吗反正我可以用现有的查询来简化吗?
  • @Developer 。 . .您可以将查询包装在 CTE 中,然后在外部查询中使用此代码。
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多