您可以对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