如何在psql中计算group by和sum的总和?

时间:2014-06-29 13:19:46

标签: postgresql sqlalchemy psql

表1

Name Quantity     Type     Value   Date
Car    1            B         10,000  time-stamp1
Car    2            S          10,000  time-stamp2
Bus    1            B          10,000  time-stamp3 

那就是我的桌面结构。我希望我的sql查询根据名称对结果进行分组,只返回结果,其中S的数量为> B型数量 虽然我能够进行分组,但我不确定如何进行分组依据的总和并且仅针对特定条件返回S类型的数量> B型数量。

我使用的是Sql-Alchemy和postgres。

1 个答案:

答案 0 :(得分:1)

您需要分两步完成 首先使用与CASE表达式的和来计算S和B的数量:

SELECT name,
       sum( CASE WHEN Type = 'B' THEN Quantity ELSE 0 END ) As q_b,
       sum( CASE WHEN Type = 'S' THEN Quantity ELSE 0 END ) As q_s,
       sum( Quantity ) As q
FROM Table1
GROUP BY name
;

然后从上述查询的结果中仅选择需要的行:

SELECT *
FROM (
   SELECT name,
          sum( CASE WHEN Type = 'B' THEN Quantity ELSE 0 END ) As q_b,
          sum( CASE WHEN Type = 'S' THEN Quantity ELSE 0 END ) As q_s,
          sum( Quantity ) As q
   FROM Table1
   GROUP BY name
) s
WHERE q_s > q_b
;

演示:http://sqlfiddle.com/#!15/f394f/2