sql - 在 SQL 中计算和划分来自多个列的不同值对

标签 sql postgresql count

我是 SQL 的新手,在寻找可以生成的查询时遇到了问题 最后输出表。

我所拥有的示例表:

ID      Color
=============
0       red
0       red
0       blue
1       red
1       yellow
1       yellow

现在通过这个查询我可以生成这个表

SELECT id, color, count(*) as num
from table group by id,color 

ID      Color      num    
=======================
0       red         2
0       blue        1
1       red         1
1       yellow      2

通过这个查询,我可以生成这张表

SELECT id, count(*) as num
from table group by id

ID      num    
============
0        3
1        3

但我希望得到这样的输出。 所以我试图找出一种方法将上述两个查询组合起来 产生这个输出表。

ID      Color      num    
=======================
0       red         0.667 = 2/3 
0       blue        0.333 = 1/3
1       red         0.333 = 1/3
1       yellow      0.667 = 2/3

最佳答案

您可以使用 count 窗口函数来划分这些值。

SELECT distinct id, color, 
1.0*count(*) over(partition by color,id)/count(*) over(partition by id) as num
from table 

关于sql - 在 SQL 中计算和划分来自多个列的不同值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44034540/

相关文章:

sql - 返回动态列集

sql - 查询Windows版本

sql - 根据替代发布者选择所有行

mysql - redshift 查询以获得所需的输出

php+MYSQL+一次获取n行

sql - 如何使用 where 子句插入

sql - 加快SQLite查询的速度,我可以不使用工会吗?

sql - 将字段与值进行比较并返回 bool

c++ - 如何在 C++ 中计算不同的数字基数?

mysql - 通过 JOIN 问题添加了 COUNT 两次