是否可以使用RelaX(关系代数在线计算器)从两个不同的列中减去值?我尝试使用投影,分组依据以及在SO上看到的一些示例。我正在尝试从员工工资的价值中减去平均工资。
答案 0 :(得分:1)
RelaX投影运算符采用一系列表达式,给出返回的每一行的列值。这些表达式可以只是列名,但不一定必须如此。 (与SQL select
子句一样。)
投影
表达式可用于使用一行中的一列或多列来创建更复杂的语句。
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:
要将特定的值引入到关系代数表达式中,必须有一种编写表文字的方法。通常,没有将必要的运算符明确化,但另一方面,代数练习经常使用某种表示法来表示值。