在具有相同另一列值的行中选择具有最高列值的行

时间:2011-10-12 14:27:21

标签: mysql group-by max

这一次,我会问一些有用的东西,但是当数据很大时,它会失败。

我的案例在这篇文章中是相同的。

how to query for rows that highest column value among rows that have same value for one of the columns

我用过

SELECT `ID`, `PDBID`, `Chain`, `UniProtID`, `PDBASequence`, `pI`, `experiment`, `resolution`
FROM protein p 
WHERE `resolution`= (SELECT MAX(`resolution`)
                              FROM protein 
                              GROUP BY `PDBASequence`
                              HAVING `PDBASequence` = p.`PDBASequence`)

我也尝试过:

 SELECT `ID`, `PDBID`, `Chain`, `UniProtID`, `PDBASequence`, `pI`, `experiment`, `resolution`
    FROM protein p 
    WHERE `resolution`= (SELECT MAX(`resolution`)
                                  FROM protein 
                                  WHERE `PDBASequence` = p.`PDBASequence`)

我必须根据PDBASequence按序列分组。但是,同时选定的代表必须是具有最大分辨率值的代表。

我在一小组上试过这段代码。工作没问题。但是,当我试图在具有80980行的真实表上运行它时,执行几乎永远。另外,由于执行类型和口袋大小,我的其他计算机给Mysql服务器带走了错误。我修复了my.ini中的设置并再次运行代码。没有改变。仍然没有结果:( 我该怎么办? 谢谢 我在蛋白质表中分配了分辨率的索引。但是,它没有改变任何东西。

1 个答案:

答案 0 :(得分:0)

看看这个版本是否更好。

SELECT p.`ID`, p.`PDBID`, p.`Chain`, p.`UniProtID`, p.`PDBASequence`, p.`pI`, p.`experiment`, p.`resolution`
FROM protein p 
    INNER JOIN (SELECT PDBASequence, MAX(`resolution`) AS MaxResolution
                    FROM protein 
                    GROUP BY `PDBASequence`) q
        ON p.PDBASequence = q.PDBASequence
            AND p.resolution = q.MaxResolution