gpt4 book ai didi

mysql - 对多个计数字段求和

转载 作者:行者123 更新时间:2023-11-29 02:45:08 25 4
gpt4 key购买 nike

我尝试使用 JOOQ 和 MySQL 数据库对多个计数字段求和。

目前我的代码是这样的:

int userId = 1;
Field<Object> newField = DSL.select(DSL.count()).from(
DSL.select(DSL.count())
.from(REQUIREMENT)
.where(REQUIREMENT.CREATOR_ID.equal(userId))
.unionAll(DSL.select(DSL.count())
.from(REQUIREMENT)
.where(REQUIREMENT.LEAD_DEVELOPER_ID.equal(userId)))

它总是返回 2 作为 newField。但我想知道有多少次用户是需求的创建者加上需求的主要开发人员。

最佳答案

你说“对多个计数求和”,但这不是你在做的。你做“计数计数”。解决方案当然是这样的:

// Assuming this to avoid referencing DSL all the time:
import static org.jooq.impl.DSL.*;

select(sum(field(name("c"), Integer.class)))
.from(
select(count().as("c"))
.from(REQUIREMENT)
.where(REQUIREMENT.CREATOR_ID.equal(userId))
.unionAll(
select(count().as("c"))
.from(REQUIREMENT)
.where(REQUIREMENT.LEAD_DEVELOPER_ID.equal(userId)))
);

或者,如果您计划将更多这些计数添加到总和中,这可能是一个更快的选择:

 select(sum(choose()
.when(REQUIREMENT.CREATOR_ID.eq(userId)
.and(REQUIREMENT.LEAD_DEVELOPER_ID.eq(userId)), inline(2))
.when(REQUIREMENT.CREATOR_ID.eq(userId), inline(1))
.when(REQUIREMENT.LEAD_DEVELOPER_ID.eq(userId), inline(1))
.otherwise(inline(0))
))
.from(REQUIREMENT);

More details about the second technique in this blog post

关于mysql - 对多个计数字段求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717672/

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