java统计某字段的所有值和数量,并和数据一起返回

发布于:2025-05-21 ⋅ 阅读:(21) ⋅ 点赞:(0)

需求场景:某些时候,需要统计数据库某个字段的所有值,以及该值在库中出现的次数。然后和其他数据一起返回。

首先,新建个名为yuyouCount 的entity类。这个就是我们要统计的对应字段数据。后面格式要求就是按这个entity


/**
 * 状况统计DTO
 */
@Data
public class yuyouCount {
    /**
     * 用户状况
     */
    private Long yuyouzk;
    
    /**
     * 数量
     */
    private Integer count;
} 

再到对应表名的Service.java里编写,我这里表是yupifensi,统计的用户状况yuyouzk有很多值,根据yupiid去查用户的状况,

public interface yupifensiService extends IService< yupifensi> {

    /**
     * 根据ID和用户状况查询记录详情
     * @param yupiid动态ID
     * @param yuyouzk患者状况
     * @return 记录详情列表
     */
    List<Yhjbjl> getyupifensi(Long yupiid, Long yuyouzk);
    
    /**
     * 统计指定用户动态ID的状况及其数量
     * @param  yupiid动态ID
     * @return 用户状况统计列表
     */
    List<YhjbjlHzzkCount> countyuyouzk(Long yupiid);
}

yupifensiServiceImpl.java

@Service
public class yupifensiServiceImpl extends ServiceImpl<yupifensiMapper, yupifensi>
    implements yupifensiService{


    @Autowired
    private yupifensiMapper yupifensiMapper;
    /**
     * 根据用户动态ID和用户状况查询记录详情
     * @param yupiid 动态ID
     * @param yuyouzk 用户状况
     * @return 记录详情列表
     */
    @Override
    public List<yupifensi> getyupifensi(Long yupiid, Long yuyouzk) {
        LambdaQueryWrapper<yupifensi> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(yupifensi::getYUPIID, yupiid)
                .eq(Yhjbjl::getYUYOUZK, yuyouzk)
                .eq(Yhjbjl::getIS_DELETE, 0);  // 不包括已删除的数据

        return yupifensiMapper.selectList(queryWrapper);
    }
    
    /**
     * 统计用户的动态ID的用户状况及其数量
     * @param yupiid 用户的动态ID
     * @return 用户状况统计列表
     */
    @Override
    public List<yuyouCount > countyuyouzk(Long yupiid) {
        return yupifensiMapper.countyuyouzk(yupiid);
    }
}

yupifensiMapper.java 用于在xml写sql执行的

@DS("busi")
public interface yupifensiMapper extends BaseMapper<yupifensi> {
    
    /**
     * 统计指定动态ID的用户状况及其数量
     * @param yupiid 动态ID
     * @return 状况统计列表
     */
    List<yuyouCount > countyuyouzk(Long yupiid);
}

再到yupifensiMapper.xml文件写sql

  <!-- 统计患者状况及数量 -->
    <select id="countyuyouzk" resultMap="yupifensiMapper">
        SELECT yuyouzk, COUNT(*) AS count 
        FROM yupifensi
        WHERE yupiid= #{yupiid} 
        AND IS_DELETE = 0
        GROUP BY yuyouzk
    </select>

再到controller写接口

@RestController
@RequestMapping("/api/yupi")
public class BchzdtController {
    @Autowired
    private YupifensiService yupifensiService ;


 @PostMapping("/getyupifensi")
    public FebsResponse getyupifensi(@RequestBody Yupifensi yupifensi ) {
        try {
            if (yupifensi.getID() == null) {
                return new FebsResponse().fail().message("动态ID不能为空");
            }
            
            // 创建结果Map
            Map<String, Object> resultMap = new HashMap<>();
            
            // 1. 查询状况统计数据
            List<yuyouCount > yuyouzkCounts = yupifensiService .countyuyouzk(bchzdt.getDTID());
            resultMap.put("yuyouzkCounts ", yuyouzkCounts );
            
            // 2. 如果传入了具体yuyouzk值,则查询对应记录详情
            if (yupifensi .getyuyouzk() != null) {
                List<yupifensi> yupifensiList = yupifensiService .getyupifensi(yupifensi .getID(), yupifensi .getYUYOUZK());
                resultMap.put("recordList", yupifensiList.isEmpty() ? new ArrayList<>() : yupifensiList );
            } else {
                resultMap.put("recordList", new ArrayList<>());
            }
            
            return new FebsResponse().success().data(resultMap).message("查询成功");
        } catch (Exception e) {
            return new FebsResponse().fail().message("查询失败:" + e.getMessage());
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到