如何在BIRT中编写含CASE WHEN的查询以实现指定统计效果?
在BIRT中实现城市人口分类统计的两种方法
你可以通过以下两种方式,实现和你提供的SQL完全一致的城市人口分类统计结果:
方法一:直接复用现有SQL作为数据源
这是最直接高效的方式,把已验证的SQL直接作为BIRT数据集的查询语句:
- 打开BIRT报表设计器,新建报表项目与空白报表文件。
- 配置数据源,完成与MySQL数据库(对应phpMyAdmin中的
test库)的连接。 - 新建数据集,将以下SQL直接粘贴到查询编辑器中:
SELECT CASE WHEN `ville_population_2012` < 500 THEN "Moins de 500 habitants" WHEN `ville_population_2012` >= 500 AND `ville_population_2012` <= 10000 THEN "Entre 500 et 10000 habitants" ELSE "Plus de 10000 habitants" END AS categorie, COUNT(*) AS nombre_villes FROM `test`.villes_france_free GROUP BY categorie;
- 预览数据集确认数据无误后,在报表中添加表格组件,将
categorie和nombre_villes字段拖入表格列,即可展示统计结果。
方法二:在BIRT报表层面实现分组与计算
如果需要在报表端处理逻辑,可先获取原始数据,再通过BIRT的内置功能完成统计:
- 新建数据集,使用基础查询获取所有城市的人口数据:
SELECT `ville_population_2012` FROM `test`.villes_france_free
- 在报表中添加表格组件,将
ville_population_2012字段拖入表格的详细行。 - 创建计算字段:在数据集的「计算字段」设置中,新增名为
categorie的字段,表达式编写如下:
if (row["ville_population_2012"] < 500) { return "Moins de 500 habitants"; } else if (row["ville_population_2012"] >= 500 && row["ville_population_2012"] <= 10000) { return "Entre 500 et 10000 habitants"; } else { return "Plus de 10000 habitants"; }
- 设置分组规则:选中表格的详细行,右键选择「插入分组」,以
categorie字段作为分组依据。 - 添加聚合统计:在分组脚注行中添加数据项,选择聚合函数
COUNT并关联ville_population_2012字段,将该数据项重命名为nombre_villes。 - 隐藏表格的详细行(仅保留分组头和分组脚注),预览报表即可得到与SQL一致的统计结果。
内容的提问来源于stack exchange,提问作者Jeanmulin
相关产品推荐
相关产品推荐

