soda- js Group By возвращает «Неверный запрос SoQL» - PullRequest
0 голосов
/ 30 апреля 2020

Я использую soda- js для запроса баз данных E-rate в США C, и мне нужно добавить 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), запрос будет работать.

Я не могу понять, почему это не удается, также учитывая Документы SoQL о Группе.

Любая помощь?

1 Ответ

0 голосов
/ 01 мая 2020

После дальнейшего изучения документации я нашел неправильное предложение:

$ group необходимо использовать вместе с $ select для предоставления функций агрегирования, которые вы будете использовать sh.

Я не считаю себя компетентным в 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); });
...