Postgresql 如何计算psql中某个条件的group by和return之和?
表1 这就是我的桌子结构。我希望我的sql查询根据名称对结果进行分组,并且只返回结果,其中类型S的数量>类型B的数量。 虽然我可以做一个group by,但我不确定如何做group by的和,并且只返回特定条件下的类型S的数量>类型B的数量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
我正在使用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
;