为每个值选择COUNT

时间:2017-01-26 08:44:50

标签: mysql html-table

我的表格如下:

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

我不知道该怎么做。

知道怎么做吗?

3 个答案:

答案 0 :(得分:2)

您可以(ab)使用SUMCASE的组合来执行此操作:

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

这已在MySQL count()

的评论中得到验证
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。