2

私は次のコードを持っています:

SELECT q1, COUNT(q1) as Responses, 
(SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1) AS Total, 
(COUNT(q1) / (SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1 )) *100 AS Percentage
FROM `acme` WHERE q1  >= 1 GROUP BY q1 DESC

q1非常に単純です。フィールドには4つの応答しかありません。1、2、3、または4です。

以下の出力を参照してください。

q1  Responses   Total   percentage
4   109         362     30.1105
3   224         362     61.8785
2   25          362     6.9061
1   4           362     1.1050

これで、オプション1、2、3、または4が含まれq1ている場合は問題なく4's機能しますが、Q1にオプションがない場合、コードは4ではなく3、2、1の行を返します(これはおそらく実際に正しい)。

だから、4がなかったら、このようなものを作るためにそれが必要です...

q1  Responses   Total   percentage
4   0           253     0
3   224         253     88.53754
2   25          253     9.88142
1   4           253     1.58102

それが理にかなっていることを願っています。

4

1 に答える 1

1

これを試してみてください:

select * from (SELECT q1, COUNT(q1) as Responses, 
(SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1) AS Total, 
(COUNT(q1) / (SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1 )) *100 AS Percentage
FROM `acme` WHERE q1  >= 1 GROUP BY q1 DESC
union
select 1,0,0,0 from dual
union
select 2,0,0,0 from dual
union
select 3,0,0,0 from dual
union
select 4,0,0,0 from dual) as t group by q1

http://www.sqlfiddle.com/#!2/84b31/6

またはあなたはなしで試すことができますDUAL

select * from (SELECT q1, COUNT(q1) as Responses, 
(SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1) AS Total, 
(COUNT(q1) / (SELECT COUNT(q1) FROM `acme` WHERE q1 >= 1 )) *100 AS Percentage
FROM `acme` WHERE q1  >= 1 GROUP BY q1 DESC
union
select 1,0,0,0
union
select 2,0,0,0
union
select 3,0,0,0
union
select 4,0,0,0) as t group by q1;

http://www.sqlfiddle.com/#!2/97031/19

于 2012-11-27T14:52:55.087 に答える