当前位置: 首页 > 面试题库 >

如何在同一张表的不同组的行之间进行计算

万俟宜修
2023-03-14
问题内容

有一个表,如:

Year   Month   Value
2011   1       500
2011   2       550
2011   3       600
...
...
2012   1       600
2012   2       750
2012   3       930

有没有一种方法可以计算相同月份/不同年份的值之间的差,因此得到的结果为:

Month    Value
1        100
2        200
3        330
...

我试图做类似的事情:

select month, a.value-b.value
from
  (select month, value from table where year = 2012) a,
  (select month, value from table where year = 2011) b

但输出为选择a(2012)的12个月*选择b(2011)的12个月。

编辑:抱歉,缺少重要信息:

通过odbc:jdbc桥对Excel工作表进行查询。

因为“ from”子句始终是这样的:[sheet1 $]我无法创建任何联接或case :(


问题答案:

您的查询无效,因为您在表上执行CROSS JOIN(是因为,),因此每一行都与另一个表中的每一行都匹配,而不是INNER JOIN一个月匹配。

修改查询:

select a.month, a.value-b.value
from
  (select month, value from table where year = 2012) a
  JOIN
  (select month, value from table where year = 2011) b
  ON a.month = b.month

更快的查询:

select a.month, a.value-b.value
from
  yourTable a
  join yourTable b
    on a.month = b.month
  where a.year = 2012 and b.year = 2011

每年每月多行:

select a.month, a.value-b.value
from
  (select month, sum(value) as value
   from yourTable where year = 2012
   group by month) a
  join
  (select month, sum(value) as value
   from yourTable where year = 2011
   group by month) b
    on a.month = b.month

SQLFiddle。



 类似资料:
  • 问题内容: 我有一个格式如下的文件(频率,文件名,代码行): 我希望输出为: 基本上,文件包含来自文件的文件名和代码行,第一个字段是频率,即文件中的代码行数。 我应该明智地阅读这些代码行。我发现这很乏味,并且如果不同文件的条目之间存在行距,那么对我来说将更容易,因此需要输出。 问题答案: Awk可以做到: 是文件名。

  • 对不起,朋友们,我想问一下。我有4个db表。 桌位 表type_member 表事务处理 表history_member 如上所示的表格内容示例。如果表格的内容像上面的照片。如何找出总交易类型_Member“银”是怎样的?因为,例如,如果我使用查询将loket表与事务连接起来,那么结果必须为空,因为在transaction表中假定没有事务来自成员类型为silver的loket。即使你看看历史,它应

  • 问题内容: 我是React的新手,我想问一个战略问题,关于如何最好地完成必须在同级组件之间传递数据的任务。 首先,我将描述任务: 假设我有多个组件,它们是一个单亲的子代,它们通过数组动态地向下传递选择框。每个框在其初始状态下具有完全相同的可用选项,但是一旦用户在一个框中选择了某个特定选项,则必须将其作为所有其他框中的选项禁用,直到将其释放。 这是(傻)代码中的相同示例。(我用作创建选择框的简写。)

  • 我有一个包含一系列事件及其时间戳的数据库。 我在这里读到这是可以在SQLite中实现的,我想知道是否也可以在presto中实现。我查看了文档,但找不到一个类似的函数来执行SQLite中的操作。

  • 问题内容: 我在中创建了一个表: 现在,我使用一个 查询 将值插入表中: 但这显示了错误: 我该如何纠正? 问题答案: 一条语句总是精确地插入1行。如果要插入带有硬编码值的多行,最常见的方法就是执行两个单独的语句。 如果您确实想要,可以从中选择您的硬编码值,然后执行 或者你可以做一个 就个人而言,我只使用两个语句。 尽管这与您的问题无关,但有几条评论 始终,始终列出您的语句中的列。您将使SQL更加

  • 问题内容: 我有两个文件,并且我想对两个文件进行逐行操作。(换句话说,每个文件的第一行都与之对应,第二行等等)。现在,我想到了一些稍微麻烦的方法来同时遍历两个文件。 但是 ,这是Python,因此我认为这里有一些语法速记。 换句话说,是否有一些简单的方法可以适应 这样就可以同时从两个文件中提取数据? 问题答案: Python 2: 使用加入了两个迭代器。 如果文件长度不相等,请使用。 在Pytho