如何在RelaX(在线关系代数计算器)中的两列中减去值

时间:2018-09-16 16:18:07

标签: relational-algebra

是否可以使用RelaX(关系代数在线计算器)从两个不同的列中减去值?我尝试使用投影,分组依据以及在SO上看到的一些示例。我正在尝试从员工工资的价值中减去平均工资。

1 个答案:

答案 0 :(得分:1)

RelaX投影运算符采用一系列表达式,给出返回的每一行的列值。这些表达式可以只是列名,但不一定必须如此。 (与SQL select子句一样。)

来自the help link

  

投影

  

表达式可用于使用一行中的一列或多列来创建更复杂的语句。

pi c.id, lower(username)->user, concat(firstname, concat(' ', lastname))->fullname (
        ρ c ( Customer )
    )

  

值表达式
  对于大多数运算符,您可以使用连接单行的一列或多列的值表达式来计算新值。这可能适用于:

     
      
  • 投影创建一个新列(确保为该列命名)
  •   
  • 可以使用任何评估为布尔值的表达式
  •   
  • 对于连接,可以使用任何评估为布尔值的表达式;请注意,rownum()表达式始终代表左手关系的索引
  •   

PS RelaX是正确的查询语言,而不是代数。在调用之前,其“值表达式”不会评估为值。这就引出了我们如何使用代数实现语言的问题。

来自Is multiplication allowed in relational algebra?

  

某些所谓的“代数”实际上是语言,因为表达式不仅表示在值上调用运算符的结果。尽管代数可能具有表示表达式和/或包含自身名称的关系值的操作数值。

  

给定一个仅在关系值和属性名称上进行投影的代数,采用属性表达式的投影就乞求其实现的问题。这在学术环境中很重要,因为一个问题可能希望您真正想出该怎么做,或者因为问题的难度取决于可用的运算符。因此,找出您应该使用的代数。

     

当我们只有带有属性名称和关系值的基本关系运算符时,可以在属性值上引入一个运算符。每个这样的运算符都可以与一个关系值相关联,该关系值具有每个操作数的属性和结果的属性。该关系包含元组,其中结果值等于在操作数值上调用的运算符的结果。 (结果在功能上取决于操作数。)

来自Relational Algebra rule for column transformation

  

假设您以称为DIVIDE的常量基关系形式为列的值提供除法运算符,其中包含元组,其中dividend / divisor = quotient。我将使用最简单的代数,其标题是属性名的集合。假设我们具有列R和平均值c的输入关系A。我们希望像R这样的关系,但是将每一列c的值设置为其原始值除以A

/* rows where
EXISTS dividend [R(dividend) & DIVIDE(dividend, A, c)]
*/
PROJECT c (
        RENAME c\dividend (R)
    NATURAL JOIN
        RENAME quotient\c (
            PROJECT dividend, quotient (SELECT divisor=A (DIVIDE))))

来自Relational algebra - recode column values

  

要将特定的值引入到关系代数表达式中,必须有一种编写表文字的方法。通常,没有将必要的运算符明确化,但另一方面,代数练习经常使用某种表示法来表示值。