spe*_*uce 5 mysql sql database select
大家好,新年快乐
情况:
我在 MySQL 数据库中有一些表:
分数:(唯一ID,唯一(objectID,metricID))
| ID | ObjectID | MetricID | Score |
|--------+----------+----------+----------|
|0 | 1 | 7 | 0 |
|1 | 5 | 3 | 13 |
|2 | 7 | 2 | 78 |
|3 | 7 | 3 | 22 |
|.....
|--------+----------+----------+----------|
Run Code Online (Sandbox Code Playgroud)
对象:(唯一 ID、唯一对象名称)
| ID | ObjectName |
|--------+------------|
|0 | Ook |
|1 | Oop |
|2 | Oww |
|3 | Oat |
|.....
|--------+------------|
Run Code Online (Sandbox Code Playgroud)
指标:(唯一 ID、唯一 MetricName)
| ID | MetricName |
|--------+------------|
|0 | Moo |
|1 | Mar |
|2 | Mee |
|3 | Meep |
|.....
|--------+------------|
Run Code Online (Sandbox Code Playgroud)
对于给定的对象 ID:
要求:
对于给定的 ObjectID,我想根据以下条件返回排序列表:
问题陈述:
我不知道用于此目的的正确 SQL 语法,并且迄今为止我的实验都失败了。我希望在数据库中尽可能多地完成这些工作,并且很少或根本不在代码或类似的讨厌的 for 循环中完成这些工作。
额外的非功能性物质
以下是根据对象与对象 1 的相似性对对象进行排序的方法:
select other.ObjectID
, avg(abs(target.Score - other.Score)) as Delta
from Scores target
join Scores other
on other.MetricID = target.MetricID
and other.ObjectID <> target.ObjectID
where target.ObjectID = 1
group by
other.ObjectID
order by
Delta
Run Code Online (Sandbox Code Playgroud)
相似性定义为共同指标的平均差异。不与对象 1 共享至少一项指标的对象不会列出。如果这个答案做出了错误的假设,请随时澄清您的问题:)
归档时间: |
|
查看次数: |
536 次 |
最近记录: |