PostgreSQL - 百分比计数

时间:2017-10-26 19:03:58

标签: sql postgresql math

我有以下查询:

SELECT COUNT(eaa.cd_aluno), c.nome_curso FROM evento_atividade_aluno eaa
JOIN aluno a ON eaa.cd_aluno = a.cd_aluno
JOIN curso c ON a.cd_curso_aluno = c.cd_curso
WHERE cd_evento_atividade = 1 AND bln_presenca IS TRUE
GROUP BY c.nome_curso
ORDER BY COUNT(eaa.cd_aluno)

结果:

1,TESTE 1
2,TESTE 2
3,TESTE 3

但我需要结果如下(百分比):

16.7,TESTE 1
33.3,TESTE 2
50,TESTE 3

我尝试做一些子查询但是没有工作:

SELECT COUNT(eaa.cd_aluno) / (SELECT COUNT(cd_aluno) FROM 
evento_atividade_aluno WHERE cd_evento_atividade = 1 AND bln_presenca IS 
TRUE), c.nome_curso FROM evento_atividade_aluno eaa
JOIN aluno a ON eaa.cd_aluno = a.cd_aluno
JOIN curso c ON a.cd_curso_aluno = c.cd_curso
WHERE cd_evento_atividade = 1 AND bln_presenca IS TRUE
GROUP BY c.nome_curso
ORDER BY COUNT(eaa.cd_aluno)

2 个答案:

答案 0 :(得分:2)

将查询放在派生表中,并计算外部查询中的总和和百分比。使用sum()作为窗口函数而不是常规聚合,因此您不必使用GROUP BY

SELECT round(count* 100.0/sum(count) OVER (), 2) AS percent, nome_curso
FROM (
    -- place your query here
    -- instead of VALUES below
    VALUES
        (1, 'TESTE 1'),
        (2, 'TESTE 2'),
        (3, 'TESTE 3')
    ) v (count, nome_curso)

 percent | nome_curso 
---------+------------
   16.67 | TESTE 1
   33.33 | TESTE 2
   50.00 | TESTE 3
(3 rows)

答案 1 :(得分:0)

只需使用窗口功能:

defaultConfig {
javaCompileOptions {
  annotationProcessorOptions {
    includeCompileClasspath true
  }
}