我的表格如下:
id type value
1 type1 Good
2 type1 Bad
3 type1 Match
4 type2 Good
5 type2 Bad
6 type2 Match
7 type3 Good
8 type3 Bad
9 type3 Match
每个'类型'都有3个可能的值选项
目前我使用此代码预览数据
$result = mysql_query("SELECT type, value, COUNT(*) FROM data GROUP BY type,value ORDER BY COUNT(*) DESC");
echo "<table border='1'>";
while($row = mysql_fetch_array( $result )) {
echo "<tr>";
echo '<td><FONT SIZE=3 COLOR=BLACK> ' . $row['type'] . ' </FONT></td>';
echo '<td><FONT SIZE=3 COLOR=BLACK> ' . $row['value'] . ' </FONT></td>';
echo '<td><FONT SIZE=4 COLOR=GREEN> ' .$row['COUNT(*)'] . '</FONT></td>';}
echo "<tr>";
echo "</table>";
因此,表的结果显示在3列中,有很多行(3 * 3 * 3)
我试图将它显示在一个包含4列且只有3行的表中 喜欢这个:
type COUNT "Good" COUNT "Bad" COUNT "Match"
type1 1 1 1
type2 1 1 1
type3 1 1 1
我不知道该怎么做。
知道怎么做吗?
答案 0 :(得分:2)
您可以(ab)使用SUM
与CASE
的组合来执行此操作:
SELECT type,
SUM(CASE WHEN type='Good' THEN 1 ELSE 0 END) AS good,
SUM(CASE WHEN type='Bad' THEN 1 ELSE 0 END) AS bad,
SUM(CASE WHEN type='Match' THEN 1 ELSE 0 END) AS match
FROM data
GROUP BY type
这将根据类型对所有值进行分组,然后使用SUM
找出每个值的数量。通过使用CASE
,我们要么为每一行加总零或一,所以它只能加上一个“计数”。
答案 1 :(得分:1)
您可以使用条件聚合:
SELECT type,
SUM(value='Good') AS Good,
SUM(value='Bad') AS Bad,
SUM(value='Match') AS Match,
FROM mytable
GROUP BY type
答案 2 :(得分:0)
只是使用count
提供替代方案,因为这样做更容易理解。
从w3schools doc,我们可以看到count
没有取空值
COUNT(column_name)函数返回值的数量(不计算NULL值)
因此,通过删除else值,它将仅计算与case语句匹配的行。 (可以使用任何非空值代替1
)
SELECT type,
COUNT(CASE WHEN type='Good' THEN 1 END) AS good,
COUNT(CASE WHEN type='Bad' THEN 1 END) AS bad,
COUNT(CASE WHEN type='Match' THEN 1 END) AS match
FROM data
GROUP BY type
以下在Sybase中有用,如果有人发现这对mysql不起作用,请通知我,因为我没有准备好测试mysql。