从具有最高C的行中选择A,B,C组B和A.

时间:2013-04-26 13:44:24

标签: mysql group-by

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

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

我试过

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

这会返回每个ID可用的最高可信度,但会找到它找到的第一个名称,而不管它的可信度。

有没有办法可以做到这一点?

2 个答案:

答案 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的第一行将是最值得信赖的。

由于此问题已标记为,因此此查询正常。它不仅非常简单,而且速度也很快。