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

在postgresql表中查找利润较高的用户,sql,database,postgresql,pgadmin,Sql,Database,Postgresql,Pgadmin,我的数据库中有一个表,其结构如下 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-0

我的数据库中有一个表,其结构如下

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
Selled是一个错误的“Selled”

我的桌子是这样的

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也指另一个表。价值是卖方出售或购买汽车的金额。Date是just when,selled是一个布尔值,用于指定卖家是出售还是购买了汽车。如果这是真的,那么他确实卖掉了它。否则他就买了

现在我想找到从销售/购买中获得最大价值的用户。这意味着他一定是那个被出卖的人。但我想不出正确的答案

此查询为我提供了仅销售的值

select sell_id, sum(worth), selled 
from sellers 
where(selled=true) 
group by sell_id, selled
例如,一些期望的结果是:

sell_id | total_profits(max)
---------------------------
  51    |     2000
其中总利润将是最大价值(其中selled=真)-价值(其中selled=假)


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

如果我没弄错你的问题,你可以单独计算,然后参加最后的计算。第一个版本提供了三个查询。第一种方法将卖出的东西放在一张表中,第二种方法将买入的东西放在一张表中,第三种方法将它们结合在一起,让你有能力进行计算

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

编辑问题添加一些示例数据和所需结果将非常有帮助。感谢您的回答。示例数据是什么意思?添加一些行作为示例和所需结果在TSql中,它将创建一个临时表来存储值。您可以删除它,但必须删除该表,因为它将为您创建该表。如果这不起作用,我可以向您展示一种子查询方法,如果您可以的话,我将不胜感激