sum(case when ct.tradeTotal >= 0 then 1 else 0 end)的意思

String hql = "select new com.ks.admin.report.dto.ReportMonthWithDrawalDto(" +
				"count(*)," +
				"sum(ct.tradeTotal)," +
				"sum(case when ct.tradeTotal >= 0 then 1 else 0 end)," +
				"sum(case when ct.tradeTotal >= 0 then ct.tradeTotal else 0 end)" +
				") " + "from CustTrade ct " + "where ct.tradeType = 'DR' " + "and ct.tradeTime between ? and ? " + "and ct.tradeDesc like '%提现%'";

count(*)返回的是Long类型,Sum(Double类型)返回Double类型, sum(case when ct.tradeTotal >= ? then ct.1 else 0 end) 返回Long类型。

sum(case when ct.tradeTotal >= 0 then 1 else 0 end)的意思是当ct.tradeTotal>=0的时候会返回1,否则返回0,而sum会累加,因为0累加之后还是0,所以只会返回1的累加之后才会改变值,因此这表示统计ct.tradeTotal>=0的数据总数。为什么不用count呢?因为试验过,count里面无法用条件。

sum(case when ct.tradeTotal >= 0 then ct.tradeTotal else 0 end)的意思是当ct.tradeTotal>=0的时候返回ct.tradeTotal的值,否则返回0,同理,如果条件成立,会累加ct.tradeTotal>=0的值。

如果以上描述有错误,请提出,一起共同学习。

猜你喜欢

转载自www.cnblogs.com/363747320wxb-qihe/p/9569073.html