mysql 取并列前10,不去重

一、问题

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

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

mysql 取并列前10,不去重_第1张图片

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
;

mysql 取并列前10,不去重_第2张图片

此时,我们发现前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
;

mysql 取并列前10,不去重_第3张图片

你可能感兴趣的:(MYSQL,mysql)