Announcement

Collapse
No announcement yet.

Perzentil bilden bei Sybase ASE -> Workarounds? T-SQL?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Perzentil bilden bei Sybase ASE -> Workarounds? T-SQL?

    Hallo Forum,

    ich muss bei einer alten Sybase ASE Datenbank bei einer Ergebnisspalte das Perzentil (75% und 95%) bilden. Leider hat diese Datenbank im Gegensatz zu den "großen" keine solchen Statistikfunktionen eingebaut. Habt ihr eine Idee, wie ich das trotzdem umsetzen könnte?

    Man müsste wohl die Ergebnisspalte aufsteigend sortieren und dann an die entsprechende Stelle "unten" bei 75% oder 95% springen und den Wert dort nehmen bzw. die zwei umliegenden Werte mitteln, je nach dem ob es glatt aufgeht oder nicht.
    Vielleicht gibt es etwas fertiges, was jemand mit T-SQL geschrieben hat, was ich verwenden könnte?

    Gruß
    Wursel

  • #2
    Bei SO gibt es diverse Beispiele für mssql, z.b.
    http://stackoverflow.com/questions/7...ings-in-ms-sql

    Ich hab kein Sybase ASE und weiß nicht, was das kann.
    Vielleicht lieferst Du mal ein paar Beispieldaten bzw. das gewünschte Endergebnis dazu.
    Gruß, defo

    Comment


    • #3
      Das Beispiel ist sehr interessant und wäre etwas, was ich brauchen könnte. Die ASE kann leider das "TOP 75 PERCENT" von dem Beispiel nicht, also nur TOP 75 (die ersten 75 Einträge), aber nicht die Prozentangabe an sich... Es sei denn, es gäbe eine Alternative dazu, z.B. die Prozent berechnen und als Zahl einsetzen. Leider sind Subquerys an der Stelle nicht erlaubt SELECT TOP ROUND( (SELECT Count(*) * 0,75 FROM tabelle) ) FROM tabelle

      In Oracle würde das so aussehen (nur als Beispiel):

      [highlight=sql]
      With "Quelldaten" AS (

      SELECT '1' AS "Stunde", '3' AS "Anzahl" FROM DUAL
      UNION
      SELECT '1', '9' FROM DUAL
      UNION
      SELECT '1', '2' FROM DUAL
      UNION
      SELECT '1', '7' FROM DUAL
      UNION
      SELECT '1', '20' FROM DUAL
      UNION
      SELECT '1', '1' FROM DUAL
      UNION
      SELECT '1', '4' FROM DUAL
      UNION
      SELECT '1', '6' FROM DUAL

      )

      SELECT "Stunde"
      ,percentile_cont(0.75) within group (order by TO_NUMBER("Anzahl") asc) as "Perzentile cont 75%"
      ,percentile_cont(0.95) within group (order by TO_NUMBER("Anzahl") asc) as "Perzentile cont 95%"
      ,AVG("Anzahl") AS "Mittelwert"
      ,median(to_number("Anzahl")) AS "Median"
      FROM "Quelldaten"
      GROUP BY "Stunde"
      [/highlight]

      D.h. neben dem Durchschnitt bzw. Median noch die 75% bzw. 95% Perzentile.

      Stunde Perzentile cont 75% Perzentile cont 95% Mittelwert Median
      1 7,5 16,15 6,5 5
      Leider wird auch percentile_cont nicht von ASE unterstützt. In Excel wäre das z.B. =QUANTIL(A1:A8;0,75) wobei die Werte der Spalte "Anzahl" im Beispiel oben in A1 bis A8 wären. Ergebnis: 7,5.

      Habt ihr eine Idee, wie ich das sonst noch umsetzen könnte? Vielleicht mit T-SQL (das kann ASE wenigstens...)? Oder eine abgewandelte Form zum o.g. Beispiel auf Stackoverflow?

      Comment

      Working...
      X