MySQL的count条件+Bigdecimal 相加结果为0的解决

sql 语句中count()有条件的时候要加上or null;
例如一个关联查询:

SELECT DISTINCT
	pd.`name`,
	count(oo.`brand_id`)  allNum,
	count(oo.`order_type` =1 OR null) ptNum,
	count(oo.`order_type` =2 OR null) gcNum,
	sum(oo.`money`) allMoney,
	sum(oo.`payment_money`) paymentMoney,
	sum(oo.`money` - oo.`payment_money`) outMoney
FROM
`pms_serve_brand` pd
	
	LEFT JOIN 
	`oms_work_order` oo
ON oo.`brand_id` = pd.`id` 
GROUP BY
	pd.`id` 

因为 当oo.order_type不是 1时 ,oo.order_type =1 结果false 不是 NULL,
Count在 值是NULL是 不统计数, (count(‘任意内容’)都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数)至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。当oo.order_type 不为1时oo.order_type =1 or NULL 的结果是NULL,Count才不会统计上这条记录数

Bigdecimal 相加结果为0的解决

BigDecimal decimal = new BigDecimal(0);
String x = "100";
for(int i=0;i<10;i++){
    
    
    decimal.add(new BigDecimal(x));
    System.out.println(x); //得到的结果为0
    decimal =decimal.add(new BigDecimal(x));
    System.out.println(x); //得到的结果正确
}

decimal.add(x)不会改变自身调用者的值,必须重新接收才行

猜你喜欢

转载自blog.csdn.net/weixin_42260782/article/details/112649984
今日推荐