postgresql嵌套sum和count函数

时间:2015-06-24 09:33:16

标签: postgresql

我正在尝试使用嵌套聚合函数。 我的查询

SELECT 
  sale_order.client_order_ref AS CHANNEL, 
  product_category.name AS BRAND,
  COUNT(sale_order_line.name) AS QTY_SOLD,
  SUM(sale_order.amount_total) AS SELLING_COST,
  SUM(COUNT(sale_order_line.name) * 4.5) AS PACK_COST,
  SUM(COUNT(sale_order_line.name) * 30.5) AS EKO_COMM
FROM 
  public.sale_order, 
  public.sale_order_line, 
  public.product_template, 
  public.product_product, 
  public.product_category
WHERE 
  sale_order_line.order_id = sale_order.id AND
  sale_order_line.product_id = product_product.id AND
  product_template.categ_id = product_category.id AND
  product_product.product_tmpl_id = product_template.id AND
  product_product.default_code = sku_cost.product_code AND
  TO_CHAR(sale_order.date_order, 'MON YYYY') = 'JUN 2015'
GROUP BY
  CHANNEL,
  BRAND
ORDER BY
  CHANNEL,
  BRAND

如何嵌套和计算? 我试图使用子查询,但没有工作。

1 个答案:

答案 0 :(得分:1)

您执行嵌套查询而不是聚合:

SELECT  CHANNEL ,
        BRAND ,
        QTY_SOLD ,
        SELLING_COST ,
        SUM(PACK_COST) AS PACK_COST ,
        SUM(EKO_COMM) AS EKO_COMM
FROM    ( SELECT    sale_order.client_order_ref AS CHANNEL ,
                    product_category.name AS BRAND ,
                    COUNT(sale_order_line.name) AS QTY_SOLD ,
                    SUM(sale_order.amount_total) AS SELLING_COST ,
                    COUNT(sale_order_line.name) * 4.5 AS PACK_COST ,
                    COUNT(sale_order_line.name) * 30.5 AS EKO_COMM
          FROM      public.sale_order ,
                    public.sale_order_line ,
                    public.product_template ,
                    public.product_product ,
                    public.product_category
          WHERE     sale_order_line.order_id = sale_order.id
                    AND sale_order_line.product_id = product_product.id
                    AND product_template.categ_id = product_category.id
                    AND product_product.product_tmpl_id = product_template.id
                    AND product_product.default_code = sku_cost.product_code
                    AND TO_CHAR(sale_order.date_order, 'MON YYYY') = 'JUN 2015'
          GROUP BY  CHANNEL ,
                    BRAND
        ) t
GROUP BY CHANNEL ,
        BRAND ,
        QTY_SOLD ,
        SELLING_COST