SQL语法计数:COUNT (value)多列

6

你好,我想学习SQL中的计数功能,但我甚至无法计算特定列中某个值出现的次数。

我的数据库结构如下(表:natural):

ID |  one |  two | three |

1  |   34 |  45  |  80  |
2  |   41 |  34  |  7   |
3  |   7  |  18  |  22  |
4  |   8  |  7   |  45  |

我正在尝试这个

 $result=mysql_query("SELECT COUNT(one) AS total FROM natural
WHERE one=7")or die("Error: ".mysql_error());
$data=mysql_fetch_assoc($result);
echo $data['total'];

即使只有1列,我也无法得到结果。

我需要计算一个“值”(例如7)在所有列中出现的次数,

就像这个例子中的值7=3总数(多列)一样。

如何编写这样的SQL语句。

编辑:尝试这样做(我的语法问题在哪里?)

$result=mysql_query("SELECT  COUNT(DISTINCT id) TotalCount FROM tblname WHERE 7 IN (one, two, three)")or die("Error: ".mysql_error());
$data=mysql_fetch_assoc($result);
echo $data['TotalCount'];

谢谢你的回答,但我认为我的问题出在mysql_query()上,因为我总是遇到语法问题。虽然有很多回答,但显然是我的问题。

$result=mysql_query("SELECT (SUM(CASE WHEN   one = 7 THEN 1 ELSE 0 END) +
        SUM(CASE WHEN   two = 7 THEN 1 ELSE 0 END) +
        SUM(CASE WHEN three = 7 THEN 1 ELSE 0 END)) TotalCount
  FROM natural")or die("Error: ".mysql_error());
$data=mysql_fetch_assoc($result);
echo $data['TotalCount'];

要修复这段代码,只需使用onetwo等等,以及natural,这是正确的语法:D

只是一条提示。mysql_query已被废弃,请学习mysqli或PDO。 - itachi
1个回答

7
这个函数即使值在多列中重复,也能给出正确的答案。
SELECT (SUM(CASE WHEN   one = 7 THEN 1 ELSE 0 END) +
        SUM(CASE WHEN   two = 7 THEN 1 ELSE 0 END) +
        SUM(CASE WHEN three = 7 THEN 1 ELSE 0 END)) TotalCount
  FROM table1

SQLFiddle

如果您有以下数据:

| ID | ONE | TWO | THREE |
--------------------------
|  1 |  34 |  45 |    80 |
|  2 |  41 |   7 |     7 |
|  3 |   7 |  18 |    22 |
|  4 |   7 |   7 |    45 |

输出结果将会是:

| TOTALCOUNT |
--------------
|          5 |

谢谢!!!我在构建mysql_query()时遇到了语法问题,请看我的编辑。对不起,我知道我很菜。 - Jules Martinez
@JulesMartinez 不用谢 :). NATURAL 是 MySql 中的保留字。因此,如果你使用保留名称(我不建议这样做)作为表或列的名称,你必须始终使用反引号 '`' 分别包围表或列的名称。 - peterm
是的,我尝试在查询末尾加上“natural”,但是在“natural”附近仍然存在语法问题。哦,对不起!!反引号 `` 谢谢!! - Jules Martinez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接