mysql - QueryDSL 中 Case Builder 表达式的总和

标签 mysql querydsl

我有如下查询

select field1,filed2,count(*),
       sum(case isNew WHEN 0 THEN 0 ELSE 1 END) as new_count1,
       sum(case source WHEN 'SomeValue' THEN 0 ELSE 1 END) as new_count2 
  from TABLE 
 where status='processed' 
   and filed1='filed1Value'
   and filed2='field2Value';

此输出是包含我需要的所有值的单行。 我想使用 queryDSL 实现相同的目的。我在 QueryDSL 中使用 CaseBuilder,但无法在其上应用总和。QueryDsl 支持吗?以前有人解决过这个问题吗??

    Expression<Integer> sourceCases = qTable.source.
            when(matchedValue1).then(new Integer(1)).
            otherwise(new Integer(0));

    Expression<Integer> newAccountCases = qTable.isNew.
            when(matchedValue2).then(new Integer(1)).
            otherwise(new Integer(0));

    return queryDslJdbcTemplate.queryForObject(sqlQuery,
            new Mapping(qTable.filed1,
                        qTable.filed2,
                        qTable.id.count(),
                        ####SUM(  (sourceCases) )###,
                        ####SUM(  (newAccountCases) )###);

最佳答案

基类 Expression 不允许您应用聚合。如果您注意到,您的 otherwise 子句实际上返回 NumberExpression。您需要做的就是使用该类型而不是 Expression。所以你的代码可能会变成:

NumberExpression<Integer> sourceCases = qTable.source.
        when(matchedValue1).then(new Integer(1)).
        otherwise(new Integer(0));

NumberExpression<Integer> newAccountCases = qTable.isNew.
        when(matchedValue2).then(new Integer(1)).
        otherwise(new Integer(0));

return queryDslJdbcTemplate.queryForObject(sqlQuery,
        new Mapping(qTable.filed1,
                    qTable.filed2,
                    qTable.id.count(),
                    sourceCases.sum(),
                    newAccountCases.sum());

关于mysql - QueryDSL 中 Case Builder 表达式的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21260239/

相关文章:

mysql - 触发在特定日期删除数据库

mysql - 如何在 VB.Net 中使用 UserControl 和 FlowLayoutPanel 从 MySQL 制作自定义表格?

用户的 MySQL 投票历史记录以及每个项目的总投票数

java - 等效查询的 QueryDSL 谓词

java - 使用静态导入和使用 QueryDSL 创建新的 q 类型实例有什么区别?

mysql - 奇怪的sql错误,变量没有被正确识别

mysql - Nodejs中有多少个工作线程?是否可以修改该数量以获得更好的性能?

mysql - QueryDSL 中的复杂 where 子句

elasticsearch - Elasticsearch-Kibana-分组依据和计数

java - QueryDSL 如何创建具有自己的联接的子查询?