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)不会改变自身调用者的值,必须重新接收才行