1

我从不同来源收集了有关应与单个名称匹配的某些 ID 的信息。在为给定 ID 提供正确名称方面,某些来源比其他来源更值得信赖。

我创建了一个表(名称、id、source_trustworthiness),我想为每个 ID 获取最值得信赖的名称。

我试过了

SELECT name, id, MAX( source_trustworthiness )
FROM table
GROUP BY id

这将返回每个 ID 可用的最高可信度,但使用它找到的第一个名称,无论其可信度如何。

有没有办法让我做到这一点?

4

2 回答 2

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
于 2013-04-26T13:46:16.470 回答
1

Mysql 有特殊的功能可以帮助:

SELECT * FROM (
  SELECT name, id, source_trustworthiness
  FROM table
  ORDER BY 3 DESC ) x
GROUP BY id

尽管这甚至不会在其他数据库中执行(没有在 GROUP BY 子句中命名所有非聚合列),但对于 mysql,它会返回按列分组的每个唯一值遇到的第一行。通过首先排列最大的行,每个 id 的第一行将是最值得信赖的。

由于这个问题被标记为,所以这个查询是可以的。它不仅非常简单,而且速度也非常快。

于 2013-04-26T13:53:57.277 回答