标签:like trade hql ade end rom esc ase new
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的值。
如果以上描述有错误,请提出,一起共同学习。
sum(case when ct.tradeTotal >= 0 then 1 else 0 end)的意思
标签:like trade hql ade end rom esc ase new
原文地址:https://www.cnblogs.com/363747320wxb-qihe/p/9569073.html