mysql 取并列前10,不去重

一、问题

在 基于jira的缺陷自动化报表分析 (四)按人员统计缺陷情况 一文中,我们建立了一张表统计开发人员的缺陷情况。

现在,我们需要根据这张表查询到单日引入缺陷数量前十的人员,如果引入数量一样多,不去重,全部查询出来。

order by、limit 10 看上去很简单,一顿操作,结果却只有前5的引入数量,因为有重复的

 

二、解决

1、先找到排名第10的引入数量是多少(按数量分组后 limit 9,1 查到第10的引入数量),然后查询大于等于该数量的开发人员和引入数量

SELECT b.assign_name,b.introduce_amount 
FROM daily_assign_bug b 
WHERE b.introduce_amount >=
(
        SELECT introduce_amount 
        FROM daily_assign_bug 
        GROUP BY introduce_amount 
        ORDER BY introduce_amount DESC 
        LIMIT 9,1
) ORDER BY b.introduce_amount DESC
;

此时,我们发现前10的数量的人有65个了

 

(2)查到前10的所有引入数量,然后对原始表用 in 过滤

SELECT b.assign_name,b.introduce_amount 
FROM daily_assign_bug b 
WHERE b.introduce_amount IN
(
        SELECT introduce_amount 
        FROM daily_assign_bug 
        GROUP BY introduce_amount 
        ORDER BY introduce_amount 
        DESC LIMIT 10
) ORDER BY b.introduce_amount DESC
;


版权声明:本文为kk_gods原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。