powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Новые статистические функции и функции вычисления регресии
3 сообщений из 3, страница 1 из 1
Новые статистические функции и функции вычисления регресии
    #38928167
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FB3 появились статистические функции

VAR_POP, VAR_SAMP, STDDEV_POP, STDDEV_SAMP, CORR, COVAR_POP, COVAR_SAMP

Описание в doc/README.statistical_functions.txt

и функции вычисления линейной регресии

REGR_AVGX, REGR_AVGY, REGR_COUNT, REGR_INTERCEPT,
REGR_R2, REGR_SLOPE, REGR_SXX, REGR_SXY, REGR_SYY

описаны в doc/README.regr_functions.txt

кстати то что IBE не знает их не так уж и безобидно. Попытался скомпилировать вот такую процедуру

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
CREATE OR ALTER PROCEDURE SP_INCORRECT_MEASURE (
    CODE_DEPARTURE INTEGER)
RETURNS (
    DEPARTURENAME VARCHAR(100),
    BREEDNAME     VARCHAR(30),
    CODE_HORSE    INTEGER,
    GPB           VARCHAR(15),
    NAME          VARCHAR(50),
    BRAND         VARCHAR(15),
    BIRTHYEAR     SMALLINT,
    AGE           NUMERIC(15,1),
    MEASURENAME   CHAR(14),
    AVALUE        NUMERIC(15,3),
    AVG_AVALUE    NUMERIC(15,3),
    DIFF          DOUBLE PRECISION,
    SIGMA         DOUBLE PRECISION)
AS
BEGIN
  FOR
    WITH T
    AS (SELECT
            M.CODE_HORSE AS CODE_HORSE,
            'Высота в холке' AS MEASURENAME,
            IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE) AS AGE,
            M.HEIGHT_HORSE AS AVALUE,
            AVG(M.HEIGHT_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) AS AVG_AVALUE,
            (STDDEV_SAMP(M.HEIGHT_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) / AVG(M.HEIGHT_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED)) AS SIGMA
        FROM
            MEASURE M
            JOIN HORSE ON HORSE.CODE_HORSE = M.CODE_HORSE
        WHERE HORSE.CODE_BREED + 0 > 0
          AND M.HEIGHT_HORSE IS NOT NULL
        UNION ALL
        SELECT
            M.CODE_HORSE AS CODE_HORSE,
            'Косая длина' AS MEASURENAME,
            IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE) AS AGE,
            M.LENGTH_HORSE AS AVALUE,
            AVG(M.LENGTH_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) AS AVG_AVALUE,
            (STDDEV_SAMP(M.LENGTH_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) / AVG(M.LENGTH_HORSE) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED)) AS SIGMA
        FROM
            MEASURE M
            JOIN HORSE ON HORSE.CODE_HORSE = M.CODE_HORSE
        WHERE HORSE.CODE_BREED + 0 > 0
          AND M.LENGTH_HORSE IS NOT NULL
        UNION ALL
        SELECT
            M.CODE_HORSE AS CODE_HORSE,
            'Обхват груди' AS MEASURENAME,
            IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE) AS AGE,
            M.CHESTAROUND AS AVALUE,
            AVG(M.CHESTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) AS AVG_AVALUE,
            (STDDEV_SAMP(M.CHESTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) / AVG(M.CHESTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED)) AS SIGMA
        FROM
            MEASURE M
            JOIN HORSE ON HORSE.CODE_HORSE = M.CODE_HORSE
        WHERE HORSE.CODE_BREED + 0 > 0
          AND M.CHESTAROUND IS NOT NULL
        UNION ALL
        SELECT
            M.CODE_HORSE AS CODE_HORSE,
            'Обхват пястья' AS MEASURENAME,
            IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE) AS AGE,
            M.WRISTAROUND AS AVALUE,
            AVG(M.WRISTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) AS AVG_AVALUE,
            (STDDEV_SAMP(M.WRISTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED) / AVG(M.WRISTAROUND) OVER(PARTITION BY IIF(M.AGE > 100, M.AGE - EXTRACT(YEAR FROM HORSE.BIRTHDAY), M.AGE), HORSE.CODE_BREED)) AS SIGMA
        FROM
            MEASURE M
            JOIN HORSE ON HORSE.CODE_HORSE = M.CODE_HORSE
        WHERE HORSE.CODE_BREED + 0 > 0
          AND M.WRISTAROUND IS NOT NULL)
    SELECT
        DEPARTURE.NAME AS DEPARTURENAME,
        BREED.NAME AS BREEDNAME,
        HORSE.CODE_HORSE AS CODE_HORSE,
        COALESCE(HORSE.GPB_NEWNUMBER, HORSE.GPB_NUMBER) AS GPB,
        HORSE.NAME AS NAME,
        HORSE.BRAND AS BRAND,
        EXTRACT(YEAR FROM HORSE.BIRTHDAY) AS BIRTHYEAR,
        T.AGE AS AGE,
        T.MEASURENAME AS MEASURENAME,
        T.AVALUE AS AVALUE,
        T.AVG_AVALUE AS AVG_AVALUE,
        ABS(T.AVALUE - T.AVG_AVALUE) / T.AVG_AVALUE * 100 AS DIFF,
        T.SIGMA * 100 AS SIGMA
    FROM
        T
        JOIN HORSE ON T.CODE_HORSE = HORSE.CODE_HORSE
        JOIN BREED ON BREED.CODE_BREED = HORSE.CODE_BREED
        JOIN DEPARTURE ON DEPARTURE.CODE_DEPARTURE = HORSE.CODE_DEPARTURE
    WHERE NOT(T.AVALUE BETWEEN T.AVG_AVALUE * (1 - 3 * T.SIGMA) AND T.AVG_AVALUE * (1 + 3 * T.SIGMA))
      AND HORSE.CODE_DEPARTURE = :CODE_DEPARTURE
    ORDER BY DEPARTURE.NAME, BREED.NAME, T.AGE, T.MEASURENAME
    INTO :DEPARTURENAME,
         :BREEDNAME,
         :CODE_HORSE,
         :GPB,
         :NAME,
         :BRAND,
         :BIRTHYEAR,
         :AGE,
         :MEASURENAME,
         :AVALUE,
         :AVG_AVALUE,
         :DIFF,
         :SIGMA
  DO
  BEGIN
    SUSPEND;
  END
END



ругается


IBEFunction 'STDEV_SAMP' is not a window function, OVER clause cannot be used

естественно в ISQL всё пучком.

P.S. маленькая хотелка нельзя ли сделать возможность копировать текст ошибки из редактора процедур, то что там в нижнем гриде появляется? А то набирать текст в ручную лень
...
Рейтинг: 0 / 0
Новые статистические функции и функции вычисления регресии
    #38929480
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил, исправил, подсветил...
Копирование - потом.
...
Рейтинг: 0 / 0
Новые статистические функции и функции вычисления регресии
    #38929571
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо. Всё работает
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Новые статистические функции и функции вычисления регресии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]