SQL限制为5条记录,汇总虚假值并打印最后

时间:2017-04-17 19:10:08

标签: mysql

我正在尝试使用MySQL以订阅者下降的顺序打印前5个公司名称和用户数。我还想把像'N / A',''(空白),'null'这样的虚假公司名称卷起来,并在结果的底部将它们列为未指定。

以下是它的样子:

公司订户

Microsoft 10
谷歌8
Facebook的6
苹果2
未指定的9

你可以看到'未指定'在底部,尽管它有9个人。

通常我使用case语句来汇总这些虚假值,如下所示:

 SELECT
            CASE
                WHEN sc.company_name not in ('null', 'n/a', '')
                    THEN company_name
                ELSE 'Unspecified'
            END as company, count(*) as subscribers
        from table
    group by company
        ORDER BY
            CASE WHEN company = 'Unspecified' THEN 1 ELSE 0 END, subscribers DESC, company

但是,限制为5条记录时,上述方法不起作用。

我也尝试使用这样的联盟:

select * from
(SELECT
company_name as company, count(*) as subscribers
from table
where company_name not in ('null', 'n/a', '')
group by company
order by subscribers desc, company asc
limit 4) z
union all
select 'Unspecified' as company, count(*) as subscribers
from table
where company_name in ('null', 'n/a', '')
group by company 

但是这不起作用,因为未指定的行不一定总是在前5行。

这可以在单个SQL语句中使用吗?我不能使用存储过程或任何花哨的东西,因为这是一个Jasper报告。

1 个答案:

答案 0 :(得分:0)

使用您的第一个查询,但不要在Unspecified中检查ORDER BY,并将其限制在前5位。然后将其放入子查询中,并重新排序以放置{ {1}}最后。

unspecified