Diese Frage ist über eine how-to so ist es nicht über ** warum nicht arbeiten * so habe ich Ihnen nicht mit einem Minimum an Daten, aber wenn Sie brauchen Ich bin mehr als glücklich, das zu tun.SPARQL, wie man die Anmeldung auf Bestellung
Dies ist meine Abfrage
select ?item (AVG(?ratingValue) as ?avg) (COUNT(*) as ?count)
{
values ?specificUser {bo:ania}
?user a rs:User ; rs:hasRated [ rs:hasRatingDate ?ratingDate ; rs:aboutItem ?item ; a rs:Likes ; rs:ratesBy ?ratingValue ] .
FILTER (?ratingDate >= (now() - "P10000D"^^xsd:duration))
# FILTER (?user != ?specificUser)
}
group by ?item
diese
mein Ergebnis istIch will nicht von ?avg
aber ich möchte bestellen, indem Sie bestellen:
?avg-(log(?count)+1)
Irgendeine Idee pl erleichtern, wie man das macht.
Um ehrlich zu sein, ich wusste nicht einmal, wie die log
in erster Linie zu tun, weil here sie nicht sagen, es irgendwelche Funktionen Logarithmus auf numerische Werte angewandt werden
Wenn Ihr Endpunkt eine Log-Funktion unterstützt, können Sie fügen Sie einfach 'Auftrag von (avg -? Log (Anzahl))' . (Beachten Sie, dass sich die +1 nicht auf die Reihenfolge auswirkt, da es sich nur um eine Konstante handelt.) Wenn der Endpunkt dies nicht unterstützt, müssen Sie es irgendwie angleichen. –
@JoshuaTaylor Ich benutze Fuseki, die Sounds unterstützt es noch nicht, nun versuche ich, die Elemente auf der Grundlage ihrer ** Wichtigkeit ** zu bestellen, der Durchschnitt hilft hier nicht (das ist der Durchschnitt der Bewertung), weil "bo: 1984" betrachtet, hat es eine Bewertung, die die höchstmögliche (1) ist, aber die 'bo: animalFarm' hat 4 Bewertungen mit einem Durchschnittswert von' 0,92'. Logischerweise sollte ich 'bo: animalFarm' nicht empfehlen 'bo: 1984' deshalb dachte ich, das 'log' könnte mir eine korrekte Reihenfolge geben. Kennen Sie bitte irgendeinen anderen Weg dies zu bestellen und anwendbar zu sein um auf SPARQL angewendet zu werden? –
Sie können 'avg' mit' count' multiplizieren und dann absteigend sortieren? –