如何在postgresql中添加列值?

时间:2015-06-02 09:56:20

标签: sql postgresql postgresql-9.2

我正在运行的查询是

select 
to_char(fs.order_item_id ,'99999999999')as Order_Item_Id ,

(case when (sum(fs.shipping_fee) < 0) then (-sum(fs.shipping_fee))else
sum(fs.shipping_fee) END) as Shipping_Fee_Charged ,

(case when (sum(se.shipping_fee) < 0) then (-sum(se.shipping_fee)) else        
sum(se.shipping_fee) END) as Standard_Shipping_Charges , 

(case when (sum(fs.shipping_fee - se.shipping_fee) < 0) then (-
sum(fs.shipping_fee - se.shipping_fee)) else sum(fs.shipping_fee - 
se.shipping_fee) END) as Error

   from 
      "meta".fk_Payment as fs 
   join 
      "meta".ship_error as se 
   on  
     fs.order_item_id = se.order_item_id
   where
      (fs.order_status = 'delivered' and se.shipping_fee != 0 and(fs.shipping_fee-se.shipping_fee)< 0)
      and
       to_char(se.order_date, 'YYYY') = '2015'
       and
       to_char(se.order_date, 'Mon') = 'Feb' 
   group by 
  fs.order_item_id 
  limit 10;

如上述查询中所述,计算列Shipping_Fee_ChargedStandard_Shipping_ChargesError并仅显示10行。现在我想再次总结这一列,只有10行。

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用子查询将结果存储在临时表(下面的代码中为T1)中,并从该结果集中找到总和

SELECT SUM(T1.Shipping_Fee_Charged), SUM(T1.Standard_Shipping_Charges), SUM(T1.Error)
FROM (
  SELECT 
  to_char(fs.order_item_id ,'99999999999')as Order_Item_Id ,

  (case when (sum(fs.shipping_fee) < 0) then (-sum(fs.shipping_fee))else
  sum(fs.shipping_fee) END) as Shipping_Fee_Charged ,

  (case when (sum(se.shipping_fee) < 0) then (-sum(se.shipping_fee)) else        
  sum(se.shipping_fee) END) as Standard_Shipping_Charges , 

  (case when (sum(fs.shipping_fee - se.shipping_fee) < 0) then (-
  sum(fs.shipping_fee - se.shipping_fee)) else sum(fs.shipping_fee - 
  se.shipping_fee) END) as Error

  FROM  "meta".fk_Payment as fs 
  JOIN  "meta".ship_error as se ON  fs.order_item_id = se.order_item_id
  WHERE (fs.order_status = 'delivered' and se.shipping_fee != 0 and(fs.shipping_fee-se.shipping_fee)< 0) AND to_char(se.order_date, 'YYYY') = '2015' AND to_char(se.order_date, 'Mon') = 'Feb' 
  GROUP BY fs.order_item_id 
  LIMIT 10
) AS T1

您也可以使用WITH Queries (Common Table Expressions),这与上面的内容相似

WITH shipping_details AS (
         SELECT 
         to_char(fs.order_item_id ,'99999999999')as Order_Item_Id ,
       .
       .
     )
SELECT SUM(Shipping_Fee_Charged), SUM(Standard_Shipping_Charges), SUM(Error) FROM shipping_details