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 语句,效率高。
  • 可以根据需求灵活添加筛选条件。

代码应用场景:

  • 可以用于统计车辆数量。
  • 可以用于分析车辆类型分布。
  • 可以用于根据条件筛选车辆信息。
Java 代码构建 SQL 语句:按车牌首字母分组统计小型车和大型车数量

原文地址: https://www.cveoy.top/t/topic/qlSV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录