参数类型的运算符 > 没有匹配的签名:STRING、INT64。支持的签名:BigQuery 中的 ANY > ANY

Posted

技术标签:

【中文标题】参数类型的运算符 > 没有匹配的签名:STRING、INT64。支持的签名:BigQuery 中的 ANY > ANY【英文标题】:No matching signature for operator > for argument types: STRING, INT64. Supported signatures: ANY > ANY at BigQuery 【发布时间】:2020-06-17 02:28:08 【问题描述】:

我正在计算 bigquery 中每个用户的评分分数。但是,我在表中的评分列是字符串数据类型。因此,当我运行查询时,它会返回错误,我认为这是因为数据类型:

 No matching signature for operator > for argument types: STRING, INT64. Supported signatures: ANY > ANY

伪代码如下: 如果 rating 10,则计数

SELECT 
    User_ID, 
COUNT(CASE WHEN Rating < 0 THEN 1 ELSE 0 END) AS rating_below_1, 
  COUNT(CASE WHEN Rating > 0 THEN 1 ELSE 0 END) as rating_above_10 
FROM
    table
GROUP BY User_ID;

【问题讨论】:

请提供样本数据和期望的结果。 【参考方案1】:

使用countif():

SELECT User_ID, 
       COUNTIF(Rating < '0') AS rating_below_1, 
       COUNTIF(Rating > '10') as rating_above_10 
FROM table
GROUP BY User_ID;

你也可以使用safe_cast():

SELECT User_ID, 
       COUNTIF(SAFE_CAST(Rating as INT64) < 0) AS rating_below_1, 
       COUNTIF(SAFE_CAST(Rating as INT64) > 10) as rating_above_10 
FROM table
GROUP BY User_ID;

【讨论】:

以上是关于参数类型的运算符 > 没有匹配的签名:STRING、INT64。支持的签名:BigQuery 中的 ANY > ANY的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 错误:运算符没有匹配的签名 >=

Python 参数类型与 C++ 签名不匹配

在数据迁移时,出现错误:运算符不存在:布尔 = 整数提示:没有运算符与给定的名称和参数类型匹配

没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。 -- Netbeans、Postgresql 8.4 和 Glassfish

Ocaml 值与模块和签名中的参数化类型不匹配

在 BigQuery 中按 Max(values) 返回列的名称。错误:“运算符 CASE 没有匹配的签名;”大查询