在 postgresql 表中查找利润较高的用户



我的数据库中有一个表,其结构是这样的

sell_id(int) | car_id(int) | worth(int) | date(date) | selled(boolean)

卖出是错误的"卖出"。

我的桌子是这样的

------------------------------
50 |50 |2405 | "2012-07-16" | false
51 |51 |9300 | "2014-10-07" | false
52 |52 |5963 | "2014-11-01" | false
53 |53 |2036 | "2014-09-19" | false
54 |54 |4770 | "2014-01-26" | false
55 |55 |11915| "2010-08-30" | true

无论如何,sell_id 是此表的主键和"母"表的外键。 car_id也指另一个表。价值是卖家出售或购买汽车的金额。日期是何时,卖出是一个布尔值,用于指定卖家是出售还是购买汽车。如果这是真的,那么他确实卖掉了它。否则他买了它。

现在我想找到从销售/购买中获得最大价值的用户。这意味着他必须是拥有买卖的人。但是我无法弄清楚正确的查询。

这个查询给了我只卖的值。

select sell_id, sum(worth), selled 
from sellers 
where(selled=true) 
group by sell_id, selled

例如,一些期望的结果是:

sell_id | total_profits(max)
---------------------------
51    |     2000

其中total_profits将是最大价值(其中出售=真(-价值(其中出售=假(

任何想法都会很有帮助。谢谢:)

如果我正确理解了您的问题,您可以单独计算,然后加入最终计算。第一个版本为您提供了三个查询。第一个将卖出放入表中,第二个将买入放入表中,第三个将它们连接在一起,使您能够进行数学运算。

select sell_id, sum(worth), selled 
into #sell
from sellers 
where(selled=true) 
group by sell_id, selled
select sell_id, sum(worth), selled 
into #buy
from sellers 
where(selled=false) 
group by sell_id, selled
select a.sell_id, sum(a.worth-b.worth) as 'Total'
from #sell a
join #buy b on a.sell_id = b.sell_id
group by a.sell_id

如果直线联接排除了预期的记录,则可能需要调整联接。 正如您所注意到的,临时表不适合您,也许可以尝试一下。

select sell_id, sum(sum(worth)-b.worth), selled 
from sellers a
join (select sell_id, sum(worth) as 'worth' from sellers where(selled=false) 
group by sell_id) b on a.sell_id = b.sell_id
where(selled=true) 
group by sell_id, selled

我不是在我可以充分测试的地方,可能需要稍微调整一下,但这就是概念。您正在对联接中的买入进行计算,然后从概念上从卖出总和中减去它们,无论使用哪种方法。

我终于找到了自己问题的答案。 正确的查询是:

select sell_id, (sum(worth) - (select sum(worth) 
from sellers where selled=false group by sell_id 
order by sum limit 1)) as final from sellers 
where selled=true   
group by sell_id order by final desc limit 1

最新更新