2013-05-21 35 views
6

你好我尝试学习SQL约数,但我不能甚而计算价值有多少次是在一个特定的列计数SQL语法COUNT(值)多列

我的数据库结构是这样的。 (表:自然)

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

+0

只是一个音符。 'mysql_query'被删除。学习mysqli或PDO。 – itachi

回答

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 | 
+0

谢谢!!!!在构建mysql_query()时,我有一个语法问题,请参阅我的编辑。并对不起,我知道我吸 –

+0

@JulesMartinez不客气:)。 'NATURAL'是MySql中的[保留字](https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)。因此,如果你用保留名称命名你的表或列(我不建议这样做),你总是需要分别在表或列名周围使用反引号'''。 – peterm

+0

是的,我试着'自然'“@查询结束,但语法问题接近自然遗迹。哦SORRY !!!反向''谢谢!! –