在SQL语句中计算结果附加行

时间:2018-06-01 19:01:51

标签: sql oracle count

我想获得下面代码所占总会员数的3%,但结果会让我回到两行,一行有%,另一行是“0”,不知道为什么或如何摆脱它。 ..

select 
    sum(Diabetes_FLAG) * 100 / (select round(count(medicaid_no) * 0.03) as percent
                                from membership) AS PERCENT_OF_Dia
from 
    prefinal
group by 
    Diabetes_Flag

不确定为什么它带回第二行我只需要%而不是第二行。

不确定我做错了什么

输出:

        PERCENT_OF_DIA
   1    11.1111111111111
   2    0

3 个答案:

答案 0 :(得分:1)

SELECT sum(Diabetes_FLAG)*100 / (SELECT round(count(medicaid_no)*0.03) as percentt
                                 FROM membership) AS PERCENT_OF_Dia
FROM prefinal
WHERE Diabetes_FLAG = 1
#  GROUP BY Diabetes_Flag  # as you're limiting by the flag in the where clause, this isn't needed.

答案 1 :(得分:0)

如果您想要一行,请删除group by

select sum(Diabetes_FLAG)*100/( SELECT round(count(medicaid_no)*0.03) as percentt
 from membership) AS PERCENT_OF_Dia
from prefinal;

当您加入group by Diabetes_FLAG时,它会为Diabetes_FLAG的每个值创建一个单独的行。根据你的结果,我猜它取值为0和1。

答案 2 :(得分:0)

  

不确定为什么会带回第二行

这是GROUP BY查询的工作原理。 group by子句按给定列对数据进行分组,即 - 它收集此列的所有值,生成这些值的不同集合,并为每个单独的值显示一行。 请考虑这个简单的演示:http://sqlfiddle.com/#!9/3a38df/1

SELECT * FROM prefinal;

| Diabetes_Flag |
|---------------|
|             1 |
|             1 |
|             5 |

通常GROUP BY列也在SELECT子句中列出,这样:

SELECT Diabetes_Flag, sum(Diabetes_Flag)
FROM prefinal
GROUP BY Diabetes_Flag;

| Diabetes_Flag | sum(Diabetes_Flag) |
|---------------|--------------------|
|             1 |                  2 |
|             5 |                  5 |

如您所见,GROUP BY显示两行 - 每个唯一值Diabetes_Flag列一行。

如果从SELECT子句中删除Diabetes_Flag列,您将得到与上面相同的结果,但没有此列:

SELECT sum(Diabetes_Flag)
FROM prefinal
GROUP BY Diabetes_Flag;

| sum(Diabetes_Flag) |
|--------------------|
|                  2 |
|                  5 |

因此,您获得2行的原因是Diabetes_Flag在表中有2个distict值。