Sql - 从选择计数查询中划分两个结果

时间:2018-02-11 13:46:49

标签: sql

我有一张表tbl_casebase

kd_casebase kd_penyakit kd_gejala
---------------------------------
    1   P01     G01
    3   P01     G03
    4   P02     G03
    5   P02     G04
    6   P03     G04
    7   P03     G05
    8   P03     G06
    9   P03     G07
    10  P04     G07
    11  P04     G08
    12  P05     G08
    13  P05     G09
    14  P05     G10
    15  P06     G10
    16  P06     G11
    17  P06     G12
    18  P07     G12
    19  P07     G13
    20  P07     G14
    21  P07     G15
    22  P08     G15
    23  P08     G16
    24  P09     G17
    25  P09     G18

我执行第一个选择计数查询:

SELECT 
    kd_penyakit, COUNT(kd_penyakit) AS count1
FROM
    tbl_casebase
WHERE 
    kd_gejala = 'G01' OR kd_gejala = 'G03'
GROUP BY 
    kd_penyakit

然后我执行第二个选择计数查询:

SELECT 
    kd_penyakit, COUNT(kd_penyakit) AS count2
FROM 
    tbl_casebase
GROUP BY 
    kd_penyakit

现在我要做的是分割两个结果,所以应该这样:

结果#1:

kd_penyakit count1
-------------------
    P01     2
    P02     1

结果#2:

kd_penyakit  count2      
-------------------
    P01     2
    P02     2
    P03     4
    P04     2
    P05     3
    P06     3
    P07     4
    P08     2
    P09     2

分裂过程是这样的:

2/2=1

1/2=0,5

0/4=0

0/2=0

0/3=0

和其他人

那么如何编写查询?

我见过类似的帖子,但它与我想要的不符。

1 个答案:

答案 0 :(得分:0)

您可以在count()函数中使用条件计数 - 条件语句。 Count函数计算任何非null值,因此如果满足条件,则返回非null值,否则返回null。这样就不需要子查询和连接:

SELECT kd_penyakit, COUNT(case when kd_gejala in ('G01','G03') then 1 else null end)/COUNT(kd_penyakit) AS count1
FROM tbl_casebase
GROUP BY kd_penyakit