如何根据数学计算对SQL中的数据进行分组?

时间:2013-07-25 13:58:40

标签: sql math group-by

我非常擅长SQL,但这超出了我的范围。我正在查看存储百货商店的交易记录的数据库表。有些交易是购买,有些是退货。我正在尝试编写一个查询,按帐户对数据进行分组,并显示帐户持有人已经进行了多少次购买以及帐户持有人已经进行了多少次退货。

以下是Transaction_Table中数据的简化视图:

Account_Id  Transaction_Code    Transaction_Amt
----------        ----------------   ---------------
123               P                  20.00  
123               P                  30.00
123               R                  10.00

因此,在英语中,Account_Id 123进行了两次购买(Transaction_Code为“P”的记录),总价值为50美元,并进行了一次返回(Transaction_Code为“R”的记录),价值10美元。

我编写了以下SQL查询:

SELECT Account_Id, SUM(Transaction_Amt) AS Total_Spent
FROM Transaction_Table 
WHERE Transaction_Code IN (‘P’, ‘R’)
GROUP BY Account_Id
ORDER BY Total_Purchased

当我运行查询时,我得到了这个:

Account_Id     Total_Spent
123            60.00

但是,我想要的是这样的:

Account_Id     Total_Purchased     Total_Returned
123            50.00               10.00

这可能吗?谢谢!!!

1 个答案:

答案 0 :(得分:0)

这是一种透视查询,您需要SUM()根据Transaction_code的值。

SELECT
  Account_Id,
  /* SUM() conditionally based on the Transaction_Code value */
  SUM(CASE WHEN Transaction_Code = 'P' THEN Transaction_Amt ELSE 0 END) AS Total_Purchased,
  SUM(CASE WHEN Transaction_Code = 'R' THEN Transaction_Amt ELSE 0 END) AS Total_Returned
FROM
  Transaction_Table
GROUP BY Account_Id
ORDER BY Total_Purchased

以下是演示:http://sqlfiddle.com/#!2/850b3/1