ja, das ist mir bekannt. Ich bin leider nicht erfahren genug, wie ich damit mein Problem lösen kann…
Ich vermute auch, dass das alleine nicht ausreicht.
WITH tmp AS (SELECT ROW_NUMBER () OVER (ORDER BY label) AS num, uuid, label, ntile(100) OVER (ORDER BY label ASC) FROM headwords),
tmp2 AS (SELECT min(num) AS minNum, max(num) AS maxNum, ntile FROM tmp GROUP BY ntile ORDER BY ntile)
SELECT num, uuid, label, ntile FROM tmp WHERE num IN (SELECT minNum FROM tmp2) OR num IN (SELECT maxNum FROM tmp2);
Ich hatte oben erwähnt, dass ich eine Spalte “id” habe. Das war nicht korrekt: ich habe pro Datensatz eine Spalte uuid, die eine zufällig generierte UUID enthält. Diese enthält also auch keinen sortierbaren bzw. mit MIN oder MAX abfragbaren Wert. Daher habe ich mit ROW_NUMBER() was numerisches on the fly erzeugt.
Das obige funktioniert zwar, ich bin mir aber nicht sicher, ob es nicht mit weniger SELECTs (eleganter) geht…? Hätte dazu noch jemand einen Tipp? (die letzte where bedingung könnte man evtl nur mit einem select machen?)