gpt4 book ai didi

Java Spring JPA : How to find the sum of only non null values in a column?

转载 作者:行者123 更新时间:2023-12-04 14:50:58 26 4
gpt4 key购买 nike

我目前有一个这样的查询:

SELECT DISTINCT t.column1, SUM(t2.column2 IS NOT NULL)
FROM table t
LEFT OUTER JOIN table t2 on table.id = t2.id
GROUP BY column1, column2;
我正在尝试使用 Spring JPA CriteriaBuilder 实现查询。我看到了 CriteriaBuilder.sum() 方法,但我没有看到将 IS NOT NULL 部分应用于选择的方法。 Column2 的数据类型是字符串。
我的代码示例
criteriaBuilder.multiselect(root.get("column1"), cb.sum(root.get("column2")));

最佳答案

由于 MySQL 宽松的语法规则,只有在 MySQL 中才会运行这样的查询。
特别是在 mysql sum(column2 is not null)是一个计数,而不是一个总和。表达式 column2 is not null是 boolean 值,在 mysql 中,false 是 0,true 是 1,所以总结这个表达式是一个 mysql hack 来计算 column2 不为空的次数。
要将其转换为标准 sql:

select
t.column1,
count(t2.column2)
from table t
left join table t2 on t.id = t2.id
group by t.column1
这是有效的,因为 count() (和所有聚合函数)忽略空值。
此版本还更正了 group by 中的错误列子句 - 在任何其他数据库中,您的查询会产生“按聚合表达式分组”错误。
此查询将在 MySQL 中产生与您当前查询相同的结果。

关于Java Spring JPA : How to find the sum of only non null values in a column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69125059/

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