Consdier У меня есть следующие данные RDF
:car1 :hasColor :red.
:car1 :hasColor :blue.
:car2 :hasColor :blue.
:car2 :hasColor :red.
Я хочу посчитать автомобили по их наборам цветов, т. Е. Это привело бы к одной группе {: blue,: red} и двум машинам в группе{: car1,: car2} и количество будет 2. Следующий запрос выглядит как интуитивно понятный способ выполнения требуемого. Однако не всегда гарантируется, что GROUP_CONCAT удалит любой порядок перед объединением строк (см. другой вопрос здесь ). Это означает: я могу получить ":red :blue"
для первой машины и: ":blue :red"
для второй машины, чтобы они не рассматривались в одной группе.
Есть ли способ добиться того, чего я хочу?
SELECT (COUNT(?car) AS ?count) ?colorGroup
WHERE
{ { SELECT ?car (GROUP_CONCAT(?color) AS ?colorGroup)
WHERE
{ { SELECT ?car ?color
WHERE
{ ?car :hasColor ?color }
ORDER BY ?color
}
}
GROUP BY ?car
}
}
GROUP BY ?colorGroup