查询API - 概述
COQL,即CRM对象查询语言的缩写,允许用户编写类似SQL的查询来从Zoho CRM获取记录。就像SQL使用表名一样,Query API在查询中使用模块和字段API名称。
虽然Search API允许模块特定的搜索,但Query API允许您从通过查找字段链接的跨模块中检索记录,从而建立连接。
目录
语法和支持的子句
Query API支持SELECT查询以及以下子句,您可以使用这些子句根据条件应用并从模块中检索记录。在SELECT列中,您必须使用字段API名称作为列名。
- SELECT - 这个语句是用来选择你想在响应中接收的字段。你可以在查询的SELECT列中指定多达500个字段API名称。你可以使用字段元数据API来获取模块中字段的API名称,或者前往设置 > 开发者中心 > APIs和SDKs,然后点击API名称标签。从可用模块列表中选择所需的模块,并查找所需字段的API名称。
- WHERE - 这个子句用于指定过滤和获取记录的条件或标准。您可以在此子句中包含多达 25个条件。确保正确地将条件括在括号中以获得期望的结果。
- FROM - 这个子句用于指定你想从哪个模块的API名称中检索记录。要从子表单中检索记录,请指定子表单模块的API名称。同样,对于具有多选查找字段的查询,查询到链接模块。
- ORDER BY - 使用此子句根据特定字段对响应中的记录进行排序,可以是升序或降序。默认的排序是根据记录ID的升序排列。
- LIMIT 和 OFFSET - LIMIT子句用于指定您希望在响应中接收的匹配记录的数量。默认值为200,最大值为2000。
OFFSET用于对记录进行分页。例如,如果您将此值设置为10,那么系统将跳过前十个匹配的记录,并从第11个索引开始检索其他记录。
在COQL中,语法是LIMIT offset, limit。第一个值是偏移量,而下一个值是限制。 - GROUP BY - 使用此子句从表中检索数据,通过在查询中指定字段API名称作为条件并对其进行分组。它可以帮助您有效地过滤和组织记录,并根据一个或多个列将查询结果作为对象分组在响应中。通常,您可以将此子句与聚合和非聚合函数一起使用。
语法
这是一个COQL查询的语法。
SELECT field_api_name1, field_api_name2
FROM base_module_api_name
WHERE field_api_name comparator logical_operator field_api_name comparator
ORDER BY field_api_name ASC/DESC
LIMIT offset, limit这是一个示例SQL查询和它的等价COQL查询。在查询中,我们想要从Leads模块获取Last_Name,Created_Time字段。WHERE子句有条件。此查询根据Created_Time和记录ID的升序对响应中的记录进行排序,如ORDER BY子句中所指定的。偏移量是10,限制是2,意味着跳过前10个匹配的记录,然后在响应中检索接下来的两个记录。
SELECT Last_Name, Created_Time
FROM Leads
WHERE Last_Name IS NOT NULL
AND Created_Time >= '2019-02-19T12:57:55+05:30'
GROUP BY Last_Name, Created_Time
ORDER BY Created_Time, id ASC
LIMIT 10 OFFSET 2;等价的COQL查询
{
"select_query" : "select Last_Name, Created_Time from Leads where (Last_Name is not null and Created_Time >= '2019-02-19T12:57:55+05:30') group by Last_Name, Created_Time order by Created_Time, id asc limit 10, 2"
}Response
{
"data": [
{
"Last_Name": "Smith",
"Created_Time": "2019-11-26T12:09:48+05:30"
},
{
"Last_Name": "Gerald",
"Created_Time": "2019-11-26T12:10:43+05:30"
}
],
"info": {
"count": 2,
"more_records": true
}
}
字段和标准
查询记录的主要目的是根据一些条件进行筛选。查询API允许您在WHERE子句中对各种字段应用多个条件。当满足条件时,匹配的记录将在响应中呈现。
考虑这个简单的查询。
{
"select_query":"select Last_Name, Company, Lead_Status from Leads where (Lead_Status = Contacted and Last_Name is not null) limit 2 "
}
在这个查询中,Last_Name,Company和Lead_Status是我们希望在响应中检索的Leads模块中字段的API名称。
WHERE子句包含了Lead_Status必须为Contacted,且Last_Name不能为空的条件。=和is not null是各自字段的比较符。and是应用于这些条件的组操作符。
就像这样,你的WHERE子句中最多可以有25个条件。也就是说,如果你的WHERE子句看起来像((A和B)和C),这意味着在三个字段或相同的字段上应用了三个条件/标准。这样,你可以在WHERE子句中的不同字段或相同字段上应用多达25个条件。
每种字段类型(数据类型)都可以使用其自己的一套比较器。请参考通过COQL查询获取记录页面,了解每种字段类型的详细信息和示例。
别名支持
你可以在上面的回应中看到,键名很长。如果你想让它们变短,或者有对你来说更有意义的名字,你可以在COQL中使用别名支持。在你的查询中使用关键字AS(不区分大小写)来自定义回应中的键名。以下是一个示例。
{
"select_query":"select 'Account_Name' AS 'Account id','Account_Name.Account_Name' as 'Account Name','Account_Name.Parent_Account' as 'Parent Account id','Account_Name.Parent_Account.Account_Name' As 'Parent Account Name' from Contacts where (Account_Name.Parent_Account.Account_Name = 'King') limit 1"
}Response
{
"data": [
{
"Account id": {
"id": "3652397000000624046"
},
"Account Name": "Zylker",
"Parent Account id": {
"id": "3652397000000190102"
},
"Parent Account Name": "King",
"id": "3652397000000269089"
}
],
"info": {
"count": 1,
"more_records": true
}
}
GROUP BY 和聚合函数
如在语法和支持的子句部分中所讨论的,GROUP BY子句是为了有效地过滤和组织记录,并根据一个或多个列将查询结果作为响应中的对象进行分组。您可以在聚合和非聚合函数上使用GROUP BY子句。
聚合函数
在Zoho CRM中使用COQL API的聚合函数的优势在于,它们可以直接在CRM中进行强大的数据分析。像SUM()、AVG()、COUNT()、MIN()和MAX()这样的聚合函数使您能够对数据进行计算,例如查找总计、平均值和其他统计度量。
这种功能有助于生成洞察和报告,无需将数据导出到外部工具,从而提高CRM环境中的效率和决策过程。
请参阅通过COQL查询获取记录页面,了解每个聚合函数的详细信息和示例。
分页
使用Query API,您可以使用LIMIT 0, 2000每次API调用检索最多2000条记录。这将获取符合WHERE子句中条件的前2000条记录。
当您想获取更多记录时,可以在LIMIT子句中使用OFFSET。例如,LIMIT 2000, 1500将从2001索引处获取1500条记录,即,它跳过索引1-2000中的记录。
使用相同的条件,您可以分页最多1,00,000条记录。对于下一组记录,添加另一个条件id > {last_record_id},并使用"AND"运算符,然后继续获取下一个1,00,000条记录。如果您的查询中有自定义排序,请相应地调整条件。在以下示例中,排序是基于Created_Time和ID字段进行的。
查询 1
{
"select_query" : "select Last_Name, Created_Time from Leads where Last_Name is not null order by Created_Time, id asc limit 0, 200"
}当你使用上述查询并更改OFFSET的值(在98,000处),你可以检索从98,001-1,00,000索引的记录。
记下响应中最后一条记录的创建时间和ID。要获取超过之前获取的1,00,000的记录,你必须构建一个查询来检索在1,00,000记录之后创建的记录,且其记录ID大于1,00,000的记录的ID。
查询 2
{
"select_query" : "select Last_Name, Created_Time from Leads where ((Last_Name is not null and Created_Time > '2019-11-26T12:14:52+05:30') and id > 3652397000001257649) order by Created_Time, id asc limit 0, 10"
}笔记
- COQL关键词不区分大小写,除了聚合函数。 SELECT与select是相同的。
- 默认情况下,如果您在查询中不包含order by,系统会根据记录ID对记录进行升序排序。
- 您可以通过多个API调用按照唯一标准检索最多1,00,000条记录。如果您想检索超过1,00,000条记录,请使用批量读取API。
API积分基于LIMIT的值。
- LIMIT在1-200之间 - 1个API积分
LIMIT在201-1000之间 - 2个API积分
- LIMIT在1001-2000之间 - 3个API积分
在构建查询时,正确解析特殊字符和SQL保留字至关重要,以避免出现问题。它们应被包含在引号中以进行正确处理。
同样,当在SELECT查询中使用SQL保留关键字时,它应被包含在引号中。以下是一个正确使用的例子,其中Dynamic,一个SQL保留关键字,在查询中被使用:
{
"select_query": "select Last_Name, 'Dynamic' from Contacts where Last_Name is not null limit 2"
}