大家好,新年快乐
情况:
我在 MySQL 数据库中有一些表:
分数:(唯一 ID,唯一(objectID,metricID))
| ID | ObjectID | MetricID | Score |
|--------+----------+----------+----------|
|0 | 1 | 7 | 0 |
|1 | 5 | 3 | 13 |
|2 | 7 | 2 | 78 |
|3 | 7 | 3 | 22 |
|.....
|--------+----------+----------+----------|
对象:(唯一 ID,唯一 ObjectName)
| ID | ObjectName |
|--------+------------|
|0 | Ook |
|1 | Oop |
|2 | Oww |
|3 | Oat |
|.....
|--------+------------|
Metrics:(唯一 ID,唯一 MetricName)
| ID | MetricName |
|--------+------------|
|0 | Moo |
|1 | Mar |
|2 | Mee |
|3 | Meep |
|.....
|--------+------------|
对于给定的对象 ID:
- 在“0”和“每个指标一个”之间会有许多分数
要求:
对于给定的 ObjectID,我想根据以下条件返回一个排序列表:
- 返回的行按与所提供对象的相似度排序
- 返回的行不包括提供的对象
- (这是我认为的难点)相似度的顺序由对象与提供的对象的“得分距离”决定,基于其得分与提供的对象得分的数字偏移/差异,对于任何有条目的度量,提供的和当前检查的对象
- 包含对象 ID、对象名称、分数差异(或类似内容)
问题陈述:
我不知道为此使用的正确 SQL 语法,而且我的实验到目前为止都失败了。我想尽可能多地在数据库中完成这项工作,并且很少或根本没有在代码或类似代码中的讨厌的 for 循环中完成这些工作。
额外的非功能
- 目前,Scores 表中只有 200 行。我的计算表明,最终可能会有大约 2,000,000 行,但可能不会更多。
- Objects 表最多只能有大约 5000 行
- Metrics 表最多只能有大约 400 行