我的桌子是这样的:
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每种类型都有三个可能的值选项
目前,我使用此代码预览数据。
$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>";因此,表its显示在包含多行(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我不知道该怎么做。
知道怎么做吗?
发布于 2017-01-26 08:51:12
您可以(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,因此它只能加为“计数”之一。
发布于 2017-01-26 08:51:45
可以使用条件聚合。
SELECT type,
SUM(value='Good') AS Good,
SUM(value='Bad') AS Bad,
SUM(value='Match') AS Match,
FROM mytable
GROUP BY type发布于 2017-01-27 11:40:28
给出一个使用count的替代方案,因为这对于它所做的事情是更容易理解的。
从w3schools文档中,我们可以看到count不接受空值
COUNT(column_name)函数返回值的数目(不计算空值)
因此,通过删除only值,它将只计算与case语句匹配的行数。(可以使用任何非空值来代替1)
这在MySQL计数()中的注释中得到验证。
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可以测试。
https://stackoverflow.com/questions/41869636
复制相似问题