Ich habe ein tabelle mit läuter längen von Dokumenten.
Ich würde gerne die summe der Längen in X gleich große Stücke teilen, die die gleiche Summe haben.
Der Clou an der Sache ist, dass nur gleiche oder wenn nötig ähnliche Längen summiert werden.
Sowas in der Art:
SELECT len FROM table ORDER BY len
Das dann in x gleich große Stücke teilen.
Also Stücke, die alle die gleiche Summe der Längen haben.
Die Stücke haben hier eine recht unterschiedliche länge, weil ich es so wenig zeilen sind.
Ach ja wofür ich das brauche:
Für einen partiellen INdex der gleichmäßig aufgeteilt ist.
Die Rechenarbeit hängt nunmal grob von der Anzahl der Wörter ab.
Hab ich auch schon überlegt.
Naja ich kann das auch in ein paar Minuten mit ein paar sql Abfragen ermitteln.
Ich arbeite jetzt übrigens mit Sphinx, eine RDBMS war einfach nicht schnell genug.
Daraus kannst schon erst mal gewisse Informationen ziehen:
test=*# select len, max(r), s from(select len, row_number() over (partition by len order by len) as r, sum(len) over (partition by len) s from jayni) foo group by len, s order by s;
len | max | s
-----+-----+----
6 | 1 | 6
2 | 6 | 12
3 | 5 | 15
4 | 7 | 28
5 | 6 | 30
(5 rows)
max ist hier, wie oft len vorkommt, und s die Summe aller gleichen len - Werte. Du könntest den ersten und letzten, den zweiten und vorletzten und so weiter zu einer Gruppe nehmen, die sind dann etwa das, was Du suchst, oder?
Ja stimmt. Mir ist nur gerade noch eingefallen, dass die Indexe auch mit einer unterschiedliche Häufigkeit durchsucht werden. Das wird kniffelig.
Danke für deine Antwort.