我想获得下面代码所占总会员数的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
答案 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值。