📖摘要
在开发中,经常会group by无法对某个字段进行分组,此时就会很难受了。今天博主给大家分享–Salesforce系列(0):Salesforce的SOQL语句group-by分组的字段类型注意事项,希望大家可以绕过这个坑。
本人便踩过这个坑,这里分享一下个人的解决方案。
🌂问题
Salesforce文档在描述使用时的注意事项时GROUP BY非常简短。确定哪些字段可以分组的指导很简单:
与之关联的Field对象
DescribeSObjectResult
具有可分组的字段,该字段定义了是否可以在GROUP BY子句中包括该字段。
这是指向该方法的一种比较round回的方式
DescribeFieldResult.isGroupable();
例如,Account.Description.getDescribe().isGroupable()**return** false
。
此外,该文件指出
在使用GROUP BY子句的查询中,不能使用使用__r语法的子关系表达式。
这使我们几乎不用继续研究,而不必检查我们可能希望分组的每个字段的Describe信息(在Dynamic SOQL上下文中是双重挑战)。那么,哪些字段类型实际上允许分组?最后一句是否禁止在中使用自定义关系GROUP BY?
未能正确使用可分组字段会产生错误
字段“ FIELD_NAME__c”无法在查询调用中分组
事实证明,可分组性沿类型行非常清晰地分解,并带有一些有趣的细微差别。基本的SOAP类型似乎是主要的决定因素,而不是唯一的决定因素。同一SOAP类型内的某些字段在可分组性方面基于其他方面而有所不同。此外,某些公式字段可以用作分组-但您不能从其他Salesforce平台限制中天真地期望这些字段!
下面按UI类型列出类型,并在括号中列出SOAP类型。该信息来自对通过Workbench和Tooling API进行的大量字段描述的检查。
😘可分组的字段类型
- 复选框(布尔值)
- 电话(字符串)
- 选择列表(字符串)
- 电子邮件(字符串)
- 文字(字符串)
- 文字区域(字符串)
- URL(字符串)
- 数字(整数)。不包含自定义字段,仅包含SOAP类型的标准Number字段int,例如
Account.NumberOfEmployees
。 - 查找(编号)
- ID(ID)
- 日期(日期)
- 将跨对象直接引用到可分组字段,从根对象起最多5个级别(SOQL限制),如中所示
SELECT count(Id) FROM Contact GROUP BY Account.Parent.Parent.Parent.Parent.Name
。定制参考和标准参考均可分组。 Checkbox
和Date
类型的公式,包括跨标准和自定义关系的跨对象公式。
😭不可分组的字段类型
- 地址复合字段
- 如果地址组合字段的类型允许,则它们可以分组。
- 常规和标准地理位置,以及是否定义为具有小数位,包括复合字段和组件(位置/双精度)
- 长文本(字符串)
富文本(字符串) - 自动编号(字符串)
- 多选选择列表(字符串)
- 数字(双精度),包括自定义数字字段,带或不带小数,且不考虑小数位数。
- 百分比(双精度),包括带或不带小数且不考虑小数位的自定义百分比字段。
- 货币(双精度),包括自定义“货币”字段,带或不带小数,且不考虑小数位数。
- 汇总汇总字段(双
COUNT
精度),包括汇总。 - 加密的文本字段(经典加密;字符串)
- 日期/时间(dateTime)
- 时间(时间)
- Checkbox和Date以外的类型的公式,包括可以分组的String type。
SOQL的这一方面缺乏定义使我有点无语,这表明我的原始答案是错误的:GROUP BY
远比我想象的要陌生。
注意:使用GROUP BY 有很多基础技巧。
传送门:Salesforce(0):Salesforce的SOQL按group by分组
🎉最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97495.html