Java 代码构建 SQL 语句:按车牌首字母分组统计小型车和大型车数量
StringBuffer sql = new StringBuffer();
sql.append(" select substr(a.hphm,0,1) as sf, ");
sql.append(" nvl(sum(case when a.hpzl like '%小型%' then 1 else 0 end),0) as xxsl, ");
sql.append(" nvl(sum(case when a.hpzl like '%大型%' then 1 else 0 end),0) as dxsl ");
sql.append(" from video_passvehicle_push a ");
sql.append(" where 1=1 ");
if (StringUtils.isNotBlank(judgmentDTO.getGwdq())){
String[] split = judgmentDTO.getGwdq().split(",");
for (int i = 0; i < split.length; i++) {
if (i==0){
sql.append(" and (a.hphm like '%'").append(split[i]).append("%' ");
}else {
sql.append(" or a.hphm like '%'").append(split[i]).append("%' ");
}
}
sql.append(") ");
}
if (StringUtils.isNotBlank(judgmentDTO.getKssj())){
sql.append(" and a.gcsj >= to_date('").append(judgmentDTO.getKssj()+" 00:00:00").append("','yyyy-MM-dd hh24:mi:ss') ");
}
if (StringUtils.isNotBlank(judgmentDTO.getJssj())){
sql.append(" and a.gcsj <= to_date('").append(judgmentDTO.getJssj()+" 23:59:59").append("','yyyy-MM-dd hh24:mi:ss') ");
}
//getAreaSql(sql,judgmentDTO);
sql.append(" group by substr(a.hphm,0,1) ");
该代码使用 StringBuffer 逐步拼接 SQL 语句,并根据条件进行筛选。
代码功能:
- 从
video_passvehicle_push表中查询数据。 - 根据车牌首字母进行分组。
- 统计每个首字母对应的 小型车数量 和 大型车数量。
- 可以根据
judgmentDTO对象中的条件进行筛选。
代码说明:
substr(a.hphm,0,1)用于获取车牌的首字母。nvl(sum(case when a.hpzl like '%小型%' then 1 else 0 end),0)用于统计小型车数量。nvl(sum(case when a.hpzl like '%大型%' then 1 else 0 end),0)用于统计大型车数量。judgmentDTO.getGwdq()用于获取车牌号码筛选条件。judgmentDTO.getKssj()用于获取开始时间筛选条件。judgmentDTO.getJssj()用于获取结束时间筛选条件。
代码优点:
- 代码清晰易懂,易于维护。
- 使用 StringBuffer 构建 SQL 语句,效率高。
- 可以根据需求灵活添加筛选条件。
代码应用场景:
- 可以用于统计车辆数量。
- 可以用于分析车辆类型分布。
- 可以用于根据条件筛选车辆信息。
原文地址: https://www.cveoy.top/t/topic/qlSV 著作权归作者所有。请勿转载和采集!