mysql查询计算逻辑行组的笛卡尔积的本地值

标签 mysql sql

我正在尝试编写一个查询来处理如下所示的单个表:

record_id   item_id   part_id   part_length
-----------  -------   --------  ------------
     1         0         0         123.12
     2         0         0         123.09
     3         0         1         231.24
     4         0         1         239.14
     5         1         0          45.91
     6         1         0          46.12
     7         1         1          62.24
     8         1         1          59.40

这基本上是一个表,其中记录了多次记录的某些元素的某些部分的不准确长度测量(不是两次,实际上每个部分都有数百个测量值)。通过一次选择,我想得到这样的结果:

record_id   item_id   part_id   unit      part_length_ratio
-----------  -------   --------  -----     ----------------
     1         0         0        1       123.12 / 231.24 
     2         0         0        1       123.09 / 239.14 
     3         0         1        0       231.24 / 123.12
     4         0         1        0       239.14 / 123.09
     5         1         0        1        45.91 /  62.24
     6         1         0        1        46.12 /  59.40
     7         1         1        0        62.24 /  45.91
     8         1         1        0        59.40 /  46.12

基本上是选择一个项目的每个部分作为单位,并在匹配测量次数的同时计算同一项目的其他部分的长度与该单位的比率。我写了一个脚本来计算这种表,但想用 sql 来完成。如果你不明白这个问题我可以理解:)

for each item i
  for each part unit of i
     for each part other of i
        if unit != other
           print i.id other.part_id unit.part_id other.length / unit.length

最佳答案

正如我在评论中所说,表格是无序集合:没有第一第二行...

...除非您想使用 id 列来显式对行进行排序。

但是,您能否保证每个案例始终有(恰好)两个样本,并且“较低的 ID”始终与第一个样本匹配?这看起来非常脆弱,因为在现实生活中,可能会出现测试执行两次或者测试丢失或“延迟”完成的情况。更不用说对数据库的并发访问。

你不能简单地添加一个“样本编号”列吗?

关于mysql查询计算逻辑行组的笛卡尔积的本地值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249562/

相关文章:

mysql - 按评级类型分组?

Java PreparedStatement 使用两个单引号作为空字符串参数

php - PDO fetchAll 结果仅返回一条记录问题

java - 从另外两个查询中提出一个查询?

mysql - 部署 mysql 数据库时出现问题(utf8mb4_unicode_520_ci -> utf8mb4_unicode_ci)

python - Django 无法连接到 SQL Server 2019

java - 学习 ERD 和 ORM 的良好学习资源

php - 根据成绩从数据库中随机分组学生

mysql - Top 10 有 child 产品的产品列表

sql - 当 PostgreSQL 中特定字段的平均值为空时如何分配零(0)