hql 中的case when运用查询

来源:互联网 发布:java客户端之间通信 编辑:程序博客网 时间:2024/05/20 02:26

有以下hql:

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的值。


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


0 0
原创粉丝点击