首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择每个值的计数

问选择每个值的计数
EN

Stack Overflow用户
提问于 2017-01-26 08:44:49
回答 3查看 154关注 0票数 1

我的桌子是这样的:

代码语言:javascript
复制
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

每种类型都有三个可能的值选项

目前,我使用此代码预览数据。

代码语言:javascript
复制
$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行,如下所示:

代码语言:javascript
复制
type    COUNT "Good"    COUNT "Bad" COUNT "Match"
type1       1               1             1
type2       1               1             1
type3       1               1             1

我不知道该怎么做。

知道怎么做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-26 08:51:12

您可以(Ab)使用SUM和CASE的组合来完成以下操作:

代码语言:javascript
复制
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,因此它只能加为“计数”之一。

票数 2
EN

Stack Overflow用户

发布于 2017-01-26 08:51:45

可以使用条件聚合。

代码语言:javascript
复制
SELECT type, 
       SUM(value='Good') AS Good,
       SUM(value='Bad') AS Bad,
       SUM(value='Match') AS Match,
FROM mytable
GROUP BY type
票数 1
EN

Stack Overflow用户

发布于 2017-01-27 11:40:28

给出一个使用count的替代方案,因为这对于它所做的事情是更容易理解的。

从w3schools文档中,我们可以看到count不接受空值

COUNT(column_name)函数返回值的数目(不计算空值)

因此,通过删除only值,它将只计算与case语句匹配的行数。(可以使用任何非空值来代替1)

这在MySQL计数()中的注释中得到验证。

代码语言:javascript
复制
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可以测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41869636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档