【问题标题】:SQL Selecting multiple sums?SQL选择多个总和?
【发布时间】:2010-10-23 17:35:38
【问题描述】:

假设我有一张桌子:

SELECT  SUM(quantity) AS items_sold_since_date,
        product_ID
FROM    Sales
WHERE order_date >= '01/01/09'
GROUP BY product_ID

这将返回自特定日期以来销售数量的产品列表。有没有办法不仅选择这个总和,还选择没有 where 条件的总和?我想查看每个产品自特定日期以来的销售情况以及所有(不受日期限制)的销售情况。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:
    SELECT  SUM(CASE WHEN order_date >= '01/01/09' THEN quantity ELSE 0 END) AS items_sold_since_date,
            SUM(quantity) AS items_sold_total,
            product_ID
    FROM    Sales
    GROUP BY product_ID
    

    【讨论】:

    • 应该比相关子查询快得多:)
    • 如果可以的话,我会投票 20 次。刚刚通过您的示例重构了我的查询,与我以前的解决方案相比,性能提高了约五倍 =D thx !
    【解决方案2】:

    像这样?:

    SELECT  SUM(quantity) AS items_sold_since_date,
            total_items_sold = (SELECT SUM(quantity) from Sales GROUP BY product_ID),
            product_ID
    FROM    Sales
    WHERE order_date >= '01/01/09'
    GROUP BY product_ID
    

    【讨论】:

      【解决方案3】:

      如果您希望同时查看总销售额,那么您可以使用 sum(sale_amt),并在组中添加 sale_amt。希望对你有帮助。

      【讨论】:

        【解决方案4】:

        您可以使用 GROUP BY 根据日期拆分销售额。 在 Oracle 中,您可以说:

        select count(*)
              ,case when order_date >= '01/01/09' then 'after' else 'before' end
        from   log 
        group by case when order_date >= '01/01/09' then 'after' else 'before' end;
        

        【讨论】:

          【解决方案5】:

          你可以写

          SELECT  SUM(quantity) AS items_sold_since_date,(SELECT  SUM(quantity) AS items_sold_since_date FROM    Sales
          GROUP BY product_ID) as items_sold,
                  product_ID
          FROM    Sales
          WHERE order_date >= '01/01/09'
          GROUP BY product_ID
          

          【讨论】:

            猜你喜欢
            • 2013-01-08
            • 2018-02-03
            • 1970-01-01
            • 2018-06-20
            • 1970-01-01
            • 2022-08-02
            • 1970-01-01
            • 2012-05-06
            • 1970-01-01
            相关资源
            最近更新 更多