3

以下是我的 SOQL 查询:

select COUNT(Id) FROM Payroll_Group_Detail__c where Tax_Batch__c=null and CreatedDate >=2012-07-21T00:00:00-05:00 and Total_Tax_Amount__c!=null GROUP By Company__c,Name,Payment_Date__c,Pay_Cycle_Type__c;

我试图计算这个 group by 子句返回的行数。但是我没有得到一个计数,而是得到了多行。如何获取此分组返回的总行数?

谢谢,卡尔文

4

4 回答 4

10

只计算记录:

Integer counter = [ Select count() 
                    FROM Payroll_Group_Detail__c 
                    Where Tax_Batch__c = null 
                    And CreatedDate >= 2012-07-21T00:00:00-05:00 
                    And Total_Tax_Amount__c != null ];

System.debug('My counted records: ' + counter);

使用 GROUP BY:

AggregateResult[] aggr = [ Select count(Id) 
                           FROM Payroll_Group_Detail__c 
                           Where Tax_Batch__c = null 
                           And CreatedDate >= 2012-07-21T00:00:00-05:00 
                           And Total_Tax_Amount__c != null
                           Group By Total_Tax_Amount__c ];

Integer counter = Integer.valueOf(aggr.size());

System.debug('#### counter: ' + counter);

但请记住,您的计数不能超过允许的调控器限制(SOQL 查询检索到的记录总数 -> 50,000)

于 2012-08-22T06:44:46.807 回答
2

分组为分组字段中的每个唯一值返回一行。

Salesforce Group By 文档

如果您想要在 2012 年 7 月 21 日之后创建的 Payroll_Group_Detail__c 总数,其中 Tax_Branch__c 为空白但设置了 Total_Tax_Amount__c,只需松开 Group By 语句。

于 2012-08-21T21:57:07.990 回答
1

对于像我这样正在寻求帮助的任何其他可怜的灵魂——如果你没有在聚合函数之后使用别名,请使用这个:

Object counter = aggr[0].get('expr0');

如果您确实在聚合函数之后使用了别名,则可以使用:

Object counter = aggr[0].get('myalias');

请参阅文档:使用 SOQL 聚合函数

于 2016-10-10T14:28:44.250 回答
0

我不认为 aggr.size 是你需要的

Integer counter = Integer.valueOf(aggr.size());

计数在 AggregateResult 对象的 expr0 字段中返回。agr.get('expr0')

将工作。如果您有其他字段返回计数,请参阅以下链接中的示例

如何在 Visualforce 页面上显示聚合 SOQL 查询的结果?

于 2013-09-13T17:47:27.330 回答