переменная 'x' в проекции отсутствует в GROUP BY

Я хочу посчитать муниципалитеты и то, что у меня в скобках работает. Однако я хочу получить и другую переменную, но когда я добавляю ее в SELECT, я получаю:

org.openrdf.query.MalformedQueryException: переменная 'region_name' в проекции отсутствует в GROUP BY.

В моем запросе у меня есть:

"SELECT ?region_name (COUNT(?municipality) AS ?count) " +

Что мне не хватает?

Обратите внимание, что в моем проекте нет ничего похожего на GROUP, я думаю, что это происходит внутри Sesame.

Я только что увидел, что если я удалю (COUNT...), я получу имена, как и ожидалось.


person gsamaras    schedule 02.12.2015    source источник
comment
Можете ли вы показать полный запрос, а не только фрагмент?   -  person Jeen Broekstra    schedule 02.12.2015
comment
Да, сэр @JeenBroekstra..! Я получил страшный ответ, который сработал, так что в конце концов, в этом нет необходимости. :)   -  person gsamaras    schedule 02.12.2015
comment
Если такой страшный ответ работает, пожалуйста, проголосуйте и примите его.   -  person Scary Wombat    schedule 02.12.2015
comment
COUNT — это совокупный запрос, который должен привести к неявной группе по всем подсчитанным элементам. Может быть, он жалуется на эту группу с немного вводящим в заблуждение сообщением.   -  person zapl    schedule 02.12.2015
comment
@zapl спасибо, но страшный ответ сделал свое дело. Есть страшный предел для принятия ответа, мистер Страшный. :) Однако я не принял его, потому что он был не таким точным, как другой ответ, извините.   -  person gsamaras    schedule 02.12.2015


Ответы (1)


В SPARQL каждый запрос, использующий агрегатную функцию (например, COUNT, SUM, SAMPLE и т. д.), всегда использует группировку. Даже если вы явно не укажете предложение GROUP BY в своем запросе, он использует «группировку по умолчанию» (то есть единую группу, к которой принадлежат все решения).

В запросе SPARQL, использующем агрегаты, неагрегированные переменные (такие как ?region_name) не могут проецироваться в предложении SELECT, если только они явно не добавлены в группу.

Исправление состоит в том, чтобы добавить явный GROUP BY к вашему запросу:

SELECT ?region_name (COUNT(?municipality) AS ?count)
WHERE {
  ... 
}
GROUP BY ?region_name 
person Jeen Broekstra    schedule 02.12.2015