postgresql 如何计算psql中一个条件的group by和return的和?

nhaq1z21  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(103)

表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的数量的结果。虽然我可以做一个group by,但我不确定如何做一个Group By的Sum,并且只返回特定条件S类型的Quantity> B类型的Quantity。

7qhs6swi

7qhs6swi1#

你需要分两步来做。
首先使用CASE表达式的sum计算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

相关问题