Это минимум данных для воспроизведения вопроса:
@prefix rs: <http://example.org/rs#>
@prefix bo: <http://example.org/bo#>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
rs:user1 rs:hasRated [rs:by "1.0"^^xsd:float ; rs:item bo:animalFarm] .
rs:user2 rs:hasRated [rs:by "0.9"^^xsd:float ; rs:item bo:animalFarm] .
rs:user3 rs:hasRated [rs:by "0.9"^^xsd:float ; rs:item bo:animalFarm] .
rs:user4 rs:hasRated [rs:by "0.5"^^xsd:float ; rs:item bo:book3] .
rs:user5 rs:hasRated [rs:by "0.6"^^xsd:float ; rs:item bo:book3] .
rs:user6 rs:hasRated [rs:by "0.8"^^xsd:float ; rs:item bo:algorithem1] .
rs:user7 rs:hasRated [rs:by "0.9"^^xsd:float ; rs:item bo:algorithem1] .
rs:user8 rs:hasRated [rs:by "0.3"^^xsd:float ; rs:item bo:book4] .
Я хочу нормализовать среднюю оценку для каждого элемента, а также нормализовать количество оценок для каждого элемента
Я могу взять среднее значение оценок для каждого элемента и количество оценок для каждого элемента следующим образом:
PREFIX bo: <http://example.org/bo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rs: <http://example.org/rs#>
select ?item (AVG(?ratingValue) as ?avg) (COUNT(*) as ?count)
{
?user rs:hasRated [ rs:item ?item ; rs:by ?ratingValue ] .
}
group by ?item
и результат:
Я хотел бы, если это возможно, иметь следующее:
bo:book3 (0.55/(0.55 + 0.93333334 + 0.85 + 0.3 )) (2/(2 + 3 + 2 + 1))
и, конечно, то же самое для других предметов.
моя проблема в том, что я не знаю, как сделать сумму и в то же время выполнить деление.
Ваша помощь высоко ценится.
Обновление 1
Я спрашиваю о возможности сделать это, если нет (или если производительность слишком плохая), я получил другое решение
select ?item (avg(?rating_)/?sumAvgRating as ?rating) (count(*)/?countRating as ?percentCount) ...
. - person Joshua Taylor   schedule 21.04.2016