表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。
答案 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
;