【问题标题】:Join logic between tables without an obvious join condition没有明显连接条件的表之间的连接逻辑
【发布时间】:2021-04-28 14:11:32
【问题描述】:

我有 2 个表格,一个带有区域、操作和数量,另一个带有价格,目标是将两者结合在一个视图中

表1

 areaid integer
 bananaunits  integer
 kilometers_ran  integer
 dogecoins  integer

areaid | bananaunits | kilometers_ran | dogecoin
1 | 0 | 1 | 10
2 | 4 | 2 | 100
 

表2

rateid integer
description text 
cost_per_unit integer

rateid | description | cost_per_unit
1 | price per banana | 0.5
2 | price per kilometers run | 2
3 | price per doge | 1

预期的结果是具有如下字段的视图:

areaid、rateid、描述、cost_per_unit、units、combined_cost

areaid| rateid| description| cost_per_unit| units| total_cost
1 | 1 | price per banana | 0.5 | 0 | 0
1 | 2 | per kilometers run | 2 | 1 | 2
1 | 3 | price per doge | 1 | 10 | 10
2 | 1 | price per banana | 0.5 | 4 | 2
2 | 2 | per kilometers run | 2 | 2 | 4
2 | 3 | price per doge | 1 | 100 | 100

换句话说,我需要在单独的行中显示每个区域的所有费率。如何做到这一点?

编辑:当前查询不起作用

从table1、table2中选择areaid、rateid、description、cost_per_unit、units、combined_cost

【问题讨论】:

  • 将列名的一部分移动到行元素和将行元素移动到列名称为透视和反透视。 PS Unpivoted 数据通常是一个糟糕的设计,当你有参数化结构时,参数应该是一列。
  • @philipxy 如果您的意思是将 table1 中的项目作为行移动到输出中,原因很简单,每个项目需要进行更多计算并且项目很多,所以输出否则很容易膨胀到 300 列
  • 我说的是 table1 的列名不应该有单元类型,但它应该有 id 和类型的列。 (比如 table2。)但是鉴于你有 table1,找出如何旋转。
  • @philipxy table1 是多个表的聚合表,每列有一个条件,有时依赖于几个表。它的目的是计算每个区域的特征
  • 请通过编辑而非 cmets 进行澄清。 PS你的评论更多的是碎片。

标签: sql postgresql join view


【解决方案1】:

由于您没有加入键,并且您希望 arearates 的每个组合都有一行,因此您基本上是在寻找 CROSS JOIN 也称为笛卡尔积

【讨论】:

  • 如何在不使用大小写的情况下将价格与单位相关联?
  • 不是交叉连接,输出total_cost不是输入值。但问题并没有说明它想要什么。但当明确时,这将是一个常见问题。
  • @philipxy 你是什么意思“问题没有说”..?我确实发布了预期的结果
  • @Luffydude 您给出了 1 个输入输出示例。你没有说它是一个例子。您给出了一些不清楚的散文片段,说明输出如何成为输入的函数。你说“换句话说”,但后面的(片段)不是换句话说,因为你还没有“用语言”给出它。您希望我们从那 1 个案例中猜测函数。 PS minimal reproducible example PS 请展示你能做的部分。 PS 在给出业务关系(船舶)/关联或表(基础或查询结果)时,请说出其中的一行根据其列值说明了业务情况。
  • @philipxy 这是我打算做什么的一个例子? (不确定你想让我说什么)。正如我所说的“用文字”,我想使用 table1 上每个区域的 table2 中的费率来计算。我做不到,所以这个问题。很抱歉,但我不知道你在 sql 中的“业务关系”是什么意思,同样,预期的输出是代表每个区域每个项目的所有费率
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 2023-03-16
相关资源
最近更新 更多