【问题标题】:What's wrong with my query? (Invalid query: Query parse error)我的查询有什么问题? (无效查询:查询解析错误)
【发布时间】:2013-12-03 08:35:14
【问题描述】:

我正在尝试在我的电子表格中使用 Google 图表查询来计算特定人员在给定日期的表单回复数。

我对 Google Charts 查询语言非常陌生(大约一个小时前我才开始尝试弄清楚),但我知道 SQL,所以我认为它不会太难。

无论如何,这就是我的查询现在的样子:

=QUERY('Form Responses'!A2:F100, "select count(*) where name = 'Ajedi32' and date timestamp = date '2013-11-19'", {"timestamp", "name", "done", "todo", "blocker", "comment"})

这是我得到的错误:

错误:无效查询:查询解析错误:在第 1 行第 14 列遇到“”*“”*“”。期待以下之一:“min”...“max”...“avg”.. . “count” ... “sum” ... “no_values” ... “no_format” ... “is” ... “null” ... “year” ... “month” ... “天”...“小时”...“分钟”...“秒”...“毫秒”...“与”...“包含”...“开始”...“结束” ...“匹配”...“喜欢”...“现在”...“dateDiff”...“季度”...“下限”...“上限”...“dayOfWeek”... . "toDate" ... ... ...

我不明白。为什么它需要一个函数名而不是 *

【问题讨论】:

    标签: google-sheets google-visualization google-sheets-formula google-sheets-query


    【解决方案1】:

    我认为问题可能在于count(*) 不是查询语言中的有效构造。尝试使用列名而不是 *

    [编辑 - 答案属于不同的 API;下面的新答案]

    在阅读了其他用户的一些问题(link1link2、[link3(Google spreadsheet Query Error - column doesn't exist))后,QUERY 函数似乎不支持使用列名。您可以按字母引用列:

    =QUERY($A$1:$C$10, 'select A, B, C');
    

    或按所选范围内的列索引:

    =QUERY($A$1:$C$10, 'select col1, col2, col3');
    

    尝试一下,看看按字母或索引寻址列是否有效。

    【讨论】:

    • 不,不是这样。将 * 更改为 timestamp 会出现相同的错误:error: Invalid query: Query parse error: Encountered " "timestamp" "timestamp "" at line 1, column 14. Was expecting one of: "min" ... "max" ... "avg" ... "count" ... "sum" ... "no_values" ... "no_format" ... "is" ... "null" ... "year" ... "month" ... "day" ... "hour" ... "minute" ... "second" ... "millisecond" ... "with" ... "contains" ... "starts" ... "ends" ... "matches" ... "like" ... "now" ... "dateDiff" ... "quarter" ... "lower" ... "upper" ... "dayOfWeek" ... "toDate" ... <ID> ... <QUOTED_ID> ...
    • 我从您自己的回答中看到,您没有使用我认为的系统:您正在处理内部电子表格查询,而我正在考虑外部查询接口。忽略我的回答,他们没有共同点。
    • 这很奇怪。我离开了谷歌的spreadsheet function list,它似乎需要一个headers 参数。不过,您似乎对使用列字母是正确的。
    【解决方案2】:

    最终,我完全避免了查询功能,而是使用了过滤功能:

    =COUNT(FILTER('Form Responses'!$A$1:$F$100; DATEVALUE('Form Responses'!$A1:$A100)=DATEVALUE('2013-11-19'); 'Form Responses'!$B1:$B100='Ajedi32'))
    

    为了可读性而扩展:

    =COUNT(
      FILTER(
        'Form Responses'!$A$1:$F$100;
        DATEVALUE('Form Responses'!$A1:$A100)=DATEVALUE('2013-11-19');
        'Form Responses'!$B1:$B100='Ajedi32'
      )
    )
    

    (如果有人仍然想尝试回答我最初的问题,请随意。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2018-09-26
      • 2015-03-21
      • 2015-07-31
      • 2010-12-23
      相关资源
      最近更新 更多