我的数据库中有一个表,其结构是这样的
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