2010-11-22 3 views
4

Angenommen, ich habe eine Tabelle mit einer Spalte von Ganzzahlen in Oracle. Es gibt eine gute Anzahl von Reihen; irgendwo in den Millionen. Ich möchte eine Abfrage schreiben, die mir eine ganze Zahl zurückgibt, die größer als 80% aller Zahlen in der Tabelle ist. Wie kann man das am besten angehen?In Oracle, finden Sie Nummer, die größer als 80% einer Reihe von Zahlen ist

Wenn es darauf ankommt, ist dies Oracle 10g r1.

+0

Spielt es eine Rolle, wenn es sogar über 80% liegt? Weil MAX (Spalte) diese Definition erfüllen könnte. –

+0

Ja, ich möchte, dass es so nahe wie möglich bei 80% liegt. 81% wären akzeptabel, 100% nicht. – RationalGeek

Antwort

8

Klingt wie Sie die PERCENTILE_DISC Funktion verwenden möchten, wenn Sie einen Ist-Wert aus dem Satz wollen, oder PERCENTILE_CONT, wenn Sie einen interpolierten Wert für ein bestimmtes Perzentil wollen, sagen 80%:

SELECT PERCENTILE_DISC(0.8) 
WITHIN GROUP(ORDER BY integer_col ASC) 
FROM some_table 

EDIT

Wenn Sie PERCENTILE_DISC verwenden, wird ein tatsächlicher Wert aus dem Dataset zurückgegeben. Wenn Sie also einen größeren Wert wünschen, sollten Sie den Wert um 1 erhöhen (für eine Integer-Spalte).

+0

THat arbeitete perfekt Ryan. Danke vielmals. Ich denke, ich hätte 8000 Zeilen SQL schreiben müssen, um das herauszufinden. Ich muss wirklich Oracle Analytics eines Tages lernen. – RationalGeek

+0

Ich bin froh, dass ich helfen konnte. –

1

Ich denke, Sie könnten die NTILE Funktion verwenden, um die Eingabe in 5 Eimer zu teilen, dann wählen Sie die MIN (Spalte) aus dem oberen Eimer.