mysql根据类型和数据正负进行分组
今天遇到了一个问题:需要根据数据的操作类型和数据是否大于0进行分组。其实最主要的原因还是因为代码设计最初的时候考虑不够全面,现在遇到了这个问题,再去改代码的话风险非常大。
下面贴出部分代码:
private void fillResponse(ProductErp e, ProductResponse response) {
switch (e.getBizType()) {
//入库
case 1:
response.setEnterQty(e.getQty());
response.setEnterAmt(e.getAmt());
break;
//销售
case 2:
//正常销售
if (e.getQty() >= 0) {
response.setSalesQty(e.getQty());
response.setSalesAmt(e.getAmt());
} else {
//销售退货
response.setReturnQty(e.getQty());
response.setReturnAmt(e.getAmt());
}
break;
default:
break;
}
}
在数据查询的时候,我需要根据操作类型和数据的正负进行分组,要不然销售退货或者正常销售就会没数据(因为分组的时候会将数据相加)。
正常写的mapper中的sql:
SELECT
biz_type,
ifnull( sum( qty ), 0 ) qty,
ifnull( sum( qty * prd_price ), 0 ) amt
FROM
t_sale
WHERE
biz_time BETWEEN #{request.startTime} AND #{request.endTime}
GROUP BY
biz_type
这样输出的结果只有两行:
查询了资料,找到了下面的解决方法:
SELECT
biz_type,
ifnull( sum( qty ), 0 ) qty,
ifnull( sum( qty * prd_price ), 0 ) amt
FROM
t_sale
WHERE
biz_time BETWEEN #{request.startTime} AND #{request.endTime}
and qty !=0
GROUP BY
biz_type,
sign(qty)
这样就可以解决了(注意,要把0的排除掉,否则的话会多输出一行0的)。