gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:27:35 27 4
gpt4 key购买 nike

我有如下查询

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com