Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何计算psql中某个条件的group by和return之和?_Postgresql_Sqlalchemy_Psql - Fatal编程技术网

Postgresql 如何计算psql中某个条件的group by和return之和?

Postgresql 如何计算psql中某个条件的group by和return之和?,postgresql,sqlalchemy,psql,Postgresql,Sqlalchemy,Psql,表1 这就是我的桌子结构。我希望我的sql查询根据名称对结果进行分组,并且只返回结果,其中类型S的数量>类型B的数量。 虽然我可以做一个group by,但我不确定如何做group by的和,并且只返回特定条件下的类型S的数量>类型B的数量 我正在使用Sql炼金术和postgres 您需要分两步进行。 首先,使用sum和CASE表达式计算S和B的数量: Name Quantity Type Value Date Car 1 B 10

表1

这就是我的桌子结构。我希望我的sql查询根据名称对结果进行分组,并且只返回结果,其中类型S的数量>类型B的数量。 虽然我可以做一个group by,但我不确定如何做group by的和,并且只返回特定条件下的类型S的数量>类型B的数量


我正在使用Sql炼金术和postgres

您需要分两步进行。
首先,使用sum和CASE表达式计算S和B的数量:

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 
然后从上述查询的结果中仅选择需要的行:

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
;

演示:

您是否尝试过在您的
分组依据
子句之前添加
WHERE“Quantity-S”>“Quantity-B”
。您介意检查吗?这里不需要子查询,您可以使用
HAVING
子句对聚合结果设置
WHERE
约束。虽然你不能参考
q_s
q_b
;您需要重复整个聚合表达式(即,
具有sum(当类型为'S'时为CASE,数量为0 END)>sum(当类型为'B'时为CASE,数量为0 END)
)。
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
;