首页 > 解决方案 > soda-js Group By 返回“无效的 SoQL 查询”

问题描述

我正在使用soda-js查询 USAC E-rate 数据库,我需要将 Group By 添加到我的查询中。Soda-js 有一个group方法作为query函数的一部分,但是每当我包含它时,http 请求都会失败。

这是返回响应的代码:

consumer.query()
  .withDataset(dataset_id)
  .limit(50)
  .select('*')
  .where({ org_state: 'CO' })
  .getRows()
    .on('success', function(rows) { console.log(rows); })
    .on('error', function(error) { console.error(error); });

这是 .group返回400 (Bad Request)错误的代码:

consumer.query()
  .withDataset(dataset_id)
  .limit(50)
  .select('*')
  .where({ org_state: 'CO' })
  .group('billed_entity_number') // <------ ADDED ROW
  .getRows()
    .on('success', function(rows) { console.log(rows); })
    .on('error', function(error) { console.error(error); });

如果我更改.group('billed_entity_number').group(null)查询工作。

考虑到 Group 上的SoQL 文档,我似乎无法找到失败的原因。

有什么帮助吗?

标签: javascriptgroup-bysocratasoda

解决方案


在进一步查看文档后,我发现了措辞不佳的句子:

$group 必须与 $select 一起使用,以提供您希望使用的聚合函数。

我不认为自己能胜任 SQL,但上次我检查时,聚合函数不需要使用 GROUP BY。所以我猜SoQL在这个意义上是独一无二的。



就我而言,我放置MAX()了所有的 SELECT 字段,并按照我的意愿返回:

consumer.query()
  .withDataset(dataset_id)
  .limit(50)
  .select('billed_entity_number','MAX(org_state) as org_state','MAX(billed_entity_name) as billed_entity_name')
  .where({ org_state: 'CO' })
  .group('billed_entity_number')
  .getRows()
    .on('success', function(rows) { console.log(rows); })
    .on('error', function(error) { console.error(error); });

推荐阅读