The Wilcox Signed Rank Test is a non-parametric test used to determine if the median of a dataset is different from a specific value. It assumes that the data is symmetrically distributed. The test can be performed in two modes: one-sample and paired two-sample. In the one-sample mode, the test compares the population median to a user-defined value. In the paired two-sample mode, the test compares the difference between two datasets to zero. The test reports the rank sum statistic and the corresponding p-value, which is calculated using the normal approximation. It is recommended to have at least 20 samples for accurate results.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_WILCOXTEST_DATA_TBL;
CREATE COLUMN TABLE PAL_WILCOXTEST_DATA_TBL ("X" INT);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (85);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (65);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (20);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (56);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (30);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (46);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (83);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (33);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (89);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (72);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (51);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (76);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (68);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (82);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (27);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (59);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (69);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (40);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (64);
INSERT INTO PAL_WILCOXTEST_DATA_TBL VALUES (8);

DROP TABLE PAL_WILCOXTEST_PARAMETER_TBL;
CREATE COLUMN TABLE 
	PAL_WILCOXTEST_PARAMETER_TBL 
	("PARAM_NAME" VARCHAR(256), "INT_VALUE" INTEGER, "DOUBLE_VALUE" DOUBLE, "STRING_VALUE" VARCHAR(1000));
INSERT INTO PAL_WILCOXTEST_PARAMETER_TBL VALUES ('MU',NULL,40,NULL);
INSERT INTO PAL_WILCOXTEST_PARAMETER_TBL VALUES ('TEST_TYPE', 0,NULL,NULL); //default value is 0, it can be {0,1,2}
INSERT INTO PAL_WILCOXTEST_PARAMETER_TBL VALUES ('CORRECTION', 1,NULL,NULL);

DROP TABLE PAL_WILCOXTEST_RESULT_TBL;
CREATE COLUMN TABLE PAL_WILCOXTEST_RESULT_TBL (
    "STAT_NAME" NVARCHAR(100),
    "STAT_VALUE" DOUBLE
);

DO BEGIN
  lt_data = SELECT * FROM PAL_WILCOXTEST_DATA_TBL;
  lt_param = SELECT * FROM PAL_WILCOXTEST_PARAMETER_TBL;
  CALL _SYS_AFL.PAL_WILCOX_TEST (:lt_data, :lt_param, lt_result);
  INSERT INTO PAL_WILCOXTEST_RESULT_TBL SELECT * FROM :lt_result;
END;

SELECT * FROM PAL_WILCOXTEST_RESULT_TBL;
