SQL 生成完整概率结果列表的查询

SQL query for generating a full list of Probability outcomes

假设我有一个 table 看起来像这样:

CREATE TABLE student
(
    name CHAR NOT NULL,
    Pwin numeric(5,2) NOT NULL 
)

INSERT INTO student 
VALUES ('A', 0.5), 
       ('B', 0.7), 
       ('C', 0.6) 

这代表 3 名学生参加不同的项目。他们每个人都有赢得比赛的概率 (Pwin)。这些事件彼此独立。他们输掉比赛的概率就是= 1 - Pwin.

有 8 种可能的结果

Awin  Bwin  Cwin
Awin  Bwin  Close
Awin  Blose Cwin
Awin  Blose Close
Alose Bwin  Cwin
Alose Bwin  Close
Alose Blose Cwin
Alose Blose Close

我想编写一个查询来输出这些概率。所以对于上面的例子,输出应该是这样的

0.5 0.7 0.6
0.5 0.7 0.4
0.5 0.3 0.6
0.5 0.3 0.4
0.5 0.7 0.6
0.5 0.7 0.4
0.5 0.3 0.6
0.5 0.3 0.4

对于此示例数据,您可以获得所有可能的组合,其中连接的数量与 table 中不同名称的数量一样多:

WITH cte AS (
  SELECT name, Pwin p FROM student
  UNION ALL
  SELECT name, 1 - Pwin FROM student
)
SELECT c1.p col1, c2.p col2, c3.p col3
FROM cte c1 
INNER JOIN cte c2 ON c2.name > c1.name
INNER JOIN cte c3 ON c3.name > c2.name;

参见demo

当然,对于更多名称,这在性能方面并不能很好地扩展。