关于#mysql#的筛选排序问题,如何解决?

数据表结构如下:

img

想要得到A、B两组的所有抽检比例为0的值,并且要分别得到A、B两组抽检比例是非0值的最少的两个
结果如下所示:

img

时间暂时不用考虑,筛选后的排序无所谓,得到的值正确就行
我现在我的写法是:
分别SELECT 出A组和B组抽检比例非0的最少两个,再SELECT为0的,中间通过union all连接,想知道有没有更好的方式(代码少)来实现

(SELECT * FROM 表T WHERE `检查组`="A"  AND `抽检比例` is not null ORDER BY `抽检比例` LIMIT 2)
union all 
(SELECT * FROM 表T WHERE `检查组`="B"  AND `抽检比例` is not null ORDER BY `抽检比例` LIMIT 2)
union all
(SELECT * FROM 表T WHERE `抽检比例` is null ORDER BY `抽检比例`)

这和你上一题不差不多么,
假如未来检查组增加的话,你这sql还得改,所以不建议sql里指定具体的值,使用开窗函数只需要对原表查一次就行了

select * from 
(select t.*,row_number() over(partition by 检查组 order by if(isnull(抽检数,1,0)), 抽检比例) rn  from 表T t) t1
where 抽检数 is null or rn<=2

表字段用中文名写的太麻烦了
SELECT
*
FROM
T AS a
WHERE
a.抽检数 is null
or (SELECT count(*) FROM T WHERE 检查组 = a.检查组 and 抽检比例<a.抽检比例 AND 抽检数 IS NOT NULL)<2
ORDER BY
a.检查组