从两个sql查询中减去多行
我已经创建了一个投注数据库,我正试图确定谁是最好和最差的投注者。我决定做这件事的最简单的方法是得到一个用户的赢款总额,然后减去他们下注的总金额 我的第一个SQL查询是从两个sql查询中减去多行,sql,postgresql,Sql,Postgresql,我已经创建了一个投注数据库,我正试图确定谁是最好和最差的投注者。我决定做这件事的最简单的方法是得到一个用户的赢款总额,然后减去他们下注的总金额 我的第一个SQL查询是 SELECT fromuser,SUM(itemsgiven::int) FROM transactions WHERE transtype='Bet Placed' GROUP BY fromuser ORDER BY 2 DESC 哪个返回这个 fromuser sum 15228328 2689 1389640
SELECT fromuser,SUM(itemsgiven::int)
FROM transactions
WHERE transtype='Bet Placed'
GROUP BY fromuser
ORDER BY 2 DESC
哪个返回这个
fromuser sum
15228328 2689
13896406 2634
55954103 308
37460340 64
66589399 62
touser sum
15228328 4387.515
55954103 152.295
13896406 120.285
66589399 71.28
37460340 56.925
然后我的第二个问题是确定总赢款
SELECT touser,SUM(itemsgiven::float)
FROM transactions
WHERE transtype='Bet Won'
GROUP BY touser
ORDER BY 2 DESC
哪个返回这个
fromuser sum
15228328 2689
13896406 2634
55954103 308
37460340 64
66589399 62
touser sum
15228328 4387.515
55954103 152.295
13896406 120.285
66589399 71.28
37460340 56.925
我的问题是,组合这些查询的最佳方式是什么,这样我就可以有两列,一列显示用户id,另一列显示它们的总赢款(或输款)。我查了一些例子,但让我大吃一惊的是,当你减去两个只从同一个用户id中减去的总和时,你如何确定
编辑:我正在使用postgresql您可以使用
UNION
:
SELECT user_id, SUM(itemsgiven) as total_itemsgiven
FROM
(
SELECT fromuser user_id, - itemsgiven::int itemsgiven
FROM transactions
WHERE 'Bet Placed'
UNION
SELECT touser user_id, itemsgiven::int itemsgiven
FROM transactions
WHERE 'Bet Won'
) t
GROUP BY user_id
ORDER BY 2 DESC
你可以用UNION
SELECT * FROM
(SELECT fromuser as a,SUM(itemsgiven::numeric) as b
FROM transactions
WHERE transtype='Bet Placed'
GROUP BY fromuser
UNION
SELECT touser as a,SUM(itemsgiven::numeric) as b
FROM transactions
WHERE transtype='Bet Won'
GROUP BY touser
) c
ORDER BY c.b DESC
您可以使用以下查询:
SELECT usr, SUM(subtotal) AS total
FROM (
SELECT fromuser AS usr, SUM(itemsgiven::int) AS subtotal
FROM transactions
WHERE transtype='Bet Placed'
GROUP BY fromuser
UNION ALL
SELECT touser AS usr, -1*SUM(itemsgiven::float) AS subtotal
FROM transactions
WHERE transtype='Bet Won'
GROUP BY touser
) s
GROUP BY usr
ORDER BY 2 DESC
您确定itemsgiven::int和itemsgiven::float吗?您使用的是mysql还是postgres?请选择一个平台,您的答案可能取决于其中一个平台的功能。我正在使用postgresqlNope抱歉,这似乎不起作用。它所做的只是给了我第一次sql查询的结果,除了总数为负的结果,例如,它给了我15228328和-2689。如果
touser
不在SELECT
中,则您不能groupbytouser
?您能为问题添加示例数据吗?更新了代码,因为没有注意到Transaction中有两个用户ID。这很接近,但它为我提供了一个表中两个表的输出,而不是差异。e、 g.我用UNION更改了UNION所有这项工作只需从第二笔金额中删除-1*并将其移动到第一笔金额。谢谢