【问题标题】:SQLite: How to find two sum values as well as difference between them?SQLite:如何找到两个总和值以及它们之间的差异?
【发布时间】:2018-05-07 23:07:50
【问题描述】:

假设我有一张桌子,上面有一堆货币兑换对。它有 4 列:

CURR_BOUGHT | AMT_BOUGHT | CURR_SOLD | AMT_SOLD

假设我们有 10 英镑,我们将其兑换为 13.33 美元,该行将填充:

USD | 13.33 | GBP | 10

我们有大量不同货币对的此类交易。现在假设我想找出我在所有交易中购买的美元总额,以及我在所有交易中出售的美元总额,以及两者之间的差异?是否可以运行将打印这 3 个数字的查询?

这个相当混乱的查询将在单独的行中打印 3 个数字。我试图让它在同一行的不同列中打印 3 个数字。

SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD') UNION SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD') UNION SELECT (SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) - (SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) FROM TRADES;

【问题讨论】:

  • 是的。这是可能的,并且您的标题已经包含允许您努力这样做的信息。当您遇到困难时,您可以回到这里并解释您遇到的问题,包括您编写的 SQL,并提出与该 SQL 相关的特定问题。祝你好运。
  • 我在这里有点新,没有意识到我应该包括我以前的努力。我认为它可能只是掩盖了问题,但我现在已经将其包含在内。

标签: sql sqlite


【解决方案1】:

您在上面使用联合的代码为每一行提供一个结果(这就是联合所做的 - 将单独的行组添加在一起)。为了使它成为一个查询,去掉联合并使用逗号,使每个单独的查询成为一个子查询。

SELECT (SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) AS AMT_BOUGHT, 
    (SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) AS AMT_SOLD,
    (SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) - (SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) FROM TRADES AS DIFF;

【讨论】:

  • 谢谢,这行得通。我还必须更改为“SELECT DISTINCT ...”,否则它会返回具有相同答案的多行(与我进行美元交易的行数一样多)。我仍然觉得我的查询不是那么干净并且做了一些hackery来到达那里,但答案是正确的,所以这才是最重要的,对吧:P
  • 啊,我没看那部分。如果您最后摆脱了 FROM TRADES,则不需要独特的。目前说你应该对交易中的每一行进行所有计算,这是多余的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多