您可以對GROUP BY
和aggregate functions單個問題執行此操作。然後,您可以使用UNION將6個查詢(針對六個問題)合併爲一個結果。通過使用SUM(CASE WHEN ...)
,您可以單獨計算三種情況:是,否,不適用。
它有點長,但我不知道比這更好。它應該輸出你需要的表格,不用百分比。隨意插入的百分比,也可在此SQL做過計算:
SELECT
"a1" AS question,
SUM(CASE WHEN a1 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a1 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a1 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
UNION ALL
SELECT
"a2" AS question,
SUM(CASE WHEN a2 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a2 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a2 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
UNION ALL
SELECT
"a3" AS question,
SUM(CASE WHEN a3 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a3 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a3 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
UNION ALL
SELECT
"a4" AS question,
SUM(CASE WHEN a4 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a4 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a4 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
UNION ALL
SELECT
"a5" AS question,
SUM(CASE WHEN a5 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a5 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a5 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
UNION ALL
SELECT
"a6" AS question,
SUM(CASE WHEN a6 = 0 THEN 1 ELSE 0 END) AS no,
SUM(CASE WHEN a6 = 1 THEN 1 ELSE 0 END) AS yes,
SUM(CASE WHEN a6 = 2 THEN 1 ELSE 0 END) AS na,
COUNT(id) AS total
FROM tbl
例如百分比:
SELECT
"a1" AS question,
(SUM(CASE WHEN a1 = 0 THEN 1 ELSE 0 END)/COUNT(id) * 100) AS no_percentage,
(SUM(CASE WHEN a1 = 1 THEN 1 ELSE 0 END)/COUNT(id) * 100) AS yes_percentage,
(SUM(CASE WHEN a1 = 2 THEN 1 ELSE 0 END)/COUNT(id) * 100) AS na_percentage
FROM tbl
所需的PHP打印例如:
<table>
<thead>
<tr>
<td>Question</td>
<td>Yes %</td>
<td>No %</td>
<td>N/A %</td>
</tr>
</thead>
<tbody>
<?php
// given this functions returns the result set as multi-dimensional array
$rows = get_records_sql($thequery);
foreach ($rows as $row) {
echo '<tr>';
echo '<td>'.$row->yes_percentage.'%</td>';
echo '<td>'.$row->yes_percentage.'% </td>';
echo '<td>'.$row->no_percentage.'% </td>';
echo '<td>'.$row->na_percentage.'% </td>';
echo '</tr>';
}
?>
</tbody>
</table>
如果我得到這個權利喲你是否試圖顯示每個值(0,1,2)的「用戶」的總比例是正確的?爲什麼你不能指望每個人和小組? – gorelative 2012-02-16 13:11:58