如何在Google Sheets编码查询中用UNIQUE去除重复行?
我在Google Sheets里通过URL编码执行过以下SQL查询,成功获取数据:
原始SQL语句:
SELECT Q, Y, J WHERE Y IS NOT NULL AND NOT Y LIKE '[%' ORDER BY Q, Y, J
对应的URL编码后内容:
SELECT%20Q%2C%20Y%2C%20J%20WHERE%20Y%20IS%20NOT%20NULL%20AND%20NOT%20Y%20LIKE%20'%5B%25'%20ORDER%20BY%20Q%2C%20Y%2C%20J
现在想去除结果中整行完全重复的数据,尝试用以下Sheets公式:
=UNIQUE(QUERY(A2:Y3608,"SELECT Q, Y, J WHERE Y IS NOT NULL AND NOT Y LIKE '[%' ORDER BY Q, Y, J"))
但把这个语句转成URL编码查询时,出现错误:
{"version":"0.6","reqId":"0","status":"error","errors":[{"reason":"invalid_query","message":"INVALID_QUERY","detailed_message":"Invalid query: PARSE_ERROR: Encountered "
"UNIQUE "" at line 1, column 1.\nWas expecting one of:\n \n "select" ...\n "where" ...\n "group" ...\n "pivot" ...\n "order" ...\n "skipping" ...\n "limit" ...\n "offset" ...\n "label" ...\n "format" ...\n "options" ...\n "}]}
请问怎么让去重逻辑在URL编码查询的场景下正常工作?
原因说明
URL查询使用的是Google Visualization API Query Language,这套语法只支持自身定义的关键词(比如SELECT、WHERE、GROUP BY等),不支持Google Sheets的内置函数(比如UNIQUE),所以直接把UNIQUE放到URL的查询语句里会触发语法解析错误。
方案1:用GROUP BY实现去重(适合URL查询场景)
既然要整行数据唯一,直接在SQL语句里对所有选中的列做GROUP BY,就能自动过滤重复行,不需要依赖UNIQUE函数。修改后的SQL语句:
SELECT Q, Y, J WHERE Y IS NOT NULL AND NOT Y LIKE '[%' GROUP BY Q, Y, J ORDER BY Q, Y, J
对应的URL编码后内容:
SELECT%20Q%2C%20Y%2C%20J%20WHERE%20Y%20IS%20NOT%20NULL%20AND%20NOT%20Y%20LIKE%20'%5B%25'%20GROUP%20BY%20Q%2C%20Y%2C%20J%20ORDER%20BY%20Q%2C%20Y%2C%20J
方案2:在Sheets单元格内使用UNIQUE(适合直接操作Sheets的场景)
如果不是必须通过URL查询,而是直接在Google Sheets里处理数据,你最初写的=UNIQUE(QUERY(...))公式是有效的,直接在单元格输入即可,不需要转成URL编码——因为这个公式是Sheets的内置函数组合,和URL查询的语法体系不同。
内容的提问来源于stack exchange,提问作者Jude_Dicken

