Java 有没有一种方法可以使用postgresql进行学生t检验

Java 有没有一种方法可以使用postgresql进行学生t检验,java,sql,database,postgresql,statistics,Java,Sql,Database,Postgresql,Statistics,我在数据库里有一堆数据 'Year', 'Disabled', 'non-disabled' 1990, 5, 3 1991, 2, 1 我希望能够找到每一列所有年份的平均值。所以我要残疾人的平均人数,然后我要非残疾人的平均年数。然后我想用t检验比较这两个值,看看两者之间是否有显著差异 我可以这样做吗?postgresql有没有办法输入两个值并使用t检验得到一个p值?作为一个老问题,我必须做同样的事情,但找不到直接的答案,所以

我在数据库里有一堆数据

'Year', 'Disabled', 'non-disabled'
 1990,     5,             3
 1991,     2,             1
我希望能够找到每一列所有年份的平均值。所以我要残疾人的平均人数,然后我要非残疾人的平均年数。然后我想用t检验比较这两个值,看看两者之间是否有显著差异


我可以这样做吗?postgresql有没有办法输入两个值并使用t检验得到一个p值?

作为一个老问题,我必须做同样的事情,但找不到直接的答案,所以我创建了自己的查询。如果有任何统计解释错误,请帮助我改进

WITH table_column1_stats_CTE AS (
    SELECT avg(column1) AS _mean, 
           stddev(column1) AS _stddev, 
           stddev(column1)/sqrt(count(*)) AS _se, 
           count(*) - 1 AS _df 
    FROM table
), table_column2_stats_CTE AS (
    SELECT avg(column2) AS _mean 
    FROM table
), t_value_CTE AS (
    SELECT _df, 
           abs(a._mean - b._mean) / (_stddev/sqrt(_df+1)) AS t_value 
    FROM table_column1_stats_CTE a, table_column2_stats_CTE b
), all_results_CTE AS (
    SELECT *, 
           row_number() OVER (ORDER BY abs(a.df - _df) ASC) AS rank 
    FROM t_test_table a, t_value_CTE b
)
SELECT 
        CASE WHEN t_value <= p01 THEN 0.99 
             WHEN t_value <= p05 THEN 0.95 
             WHEN t_value <= p1 THEN 0.9 
             WHEN t_value <= p2 THEN 0.8 ELSE 0.0 
        END AS significance
FROM all_results_CTE 
WHERE rank = 1
如果我可以附加t_test_表,我会这样做,但您可以通过复制来创建它:

您是否尝试过使用avgsome\U value之类的sql聚合?PostgreSQL本身只有有限的内置统计功能,但PL/R扩展支持的统计测试和其他功能比您所希望的更多。也就是说,我可能会用avg得到平均值,用stddev得到标准偏差,然后将这些值插入Java端的t-test中。