2016-04-05 15 views
0

Ich versuche, den Perzentilwert einer Zeile zu erhalten.Erhalte Zeilenprozentsatz von der Reihenfolge nach Ranking

Zum Beispiel, wenn es 100 Zeilen gibt, und eine Zeile ist auf Position 50 basierend auf ORDER BY, dann sollte es 50. Perzentil sein (denke ich). So etwas wie Zeilenindex basierend auf der Reihenfolge dividiert durch die Gesamtzahl der Zeilen.

Im Folgenden wird den Zeilenrang:

SET @rank=0; 
SELECT id,code,@rank:[email protected]+1 AS rank 
FROM images 
ORDER BY 
    (select avg(value) 
    from ratings 
    where image_id = images.id and type = 1) 
DESC 

Wie würde ich das Perzentil für eine einzelne Zeile zu bekommen? (WHERE id = :id)

Antwort

0

Der einzige fehlende Teil des Puzzles war die Gesamtzahl der Zeilen in der Ergebnismenge:

SET @rank=0; 
SELECT id,code,@rank:[email protected]+1 AS rank, 
     100.0 * @rank/(SELECT COUNT(*) FROM images) AS percentile 
FROM images 
ORDER BY 
    (select avg(value) 
    from ratings 
    where image_id = images.id and type = 1) 
DESC 
+0

Ich denke, es ist 'ASC' jetzt, wenn es Perzentil ist, aber vielen Dank! Das einzige Problem ist, dass es nicht funktioniert, wenn 'WHERE' verwendet wird, um eine einzelne Zeile zu erhalten. – frosty

+0

Wenn Sie Ihre Ergebnisse in der Hauptauswahl filtern, müssen Sie die gleichen Filterkriterien innerhalb der' SELECT COUNT (*) 'Unterabfrage verwenden! –

Verwandte Themen