我从不同来源收集了有关某些ID应与单个名称匹配的信息。在给出给定ID的正确名称时,某些来源比其他来源更值得信赖。
我创建了一个表(name,id,source_trustworthiness),我想为每个ID获得最值得信赖的名称。
我试过
SELECT name, id, MAX( source_trustworthiness )
FROM table
GROUP BY id
这会返回每个ID可用的最高可信度,但会找到它找到的第一个名称,而不管它的可信度。
有没有办法可以做到这一点?
答案 0 :(得分:1)
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT id, MAX(source_trustworthiness) max_val
FROM TableName
GROUP BY ID
) b ON a.ID = b.ID AND
a.source_trustworthiness = b.max_val
答案 1 :(得分:1)
Mysql有特殊功能可以提供帮助:
SELECT * FROM (
SELECT name, id, source_trustworthiness
FROM table
ORDER BY 3 DESC ) x
GROUP BY id
虽然这甚至不能在其他数据库中执行(不是在GROUP BY子句中命名所有非聚合列),但是对于mysql,它返回为分组的每个唯一值遇到的第一个行按列。通过首先排序最大的行,每个id的第一行将是最值得信赖的。
由于此问题已标记为mysql,因此此查询正常。它不仅非常简单,而且速度也很快。