MYSQL获取每列等于特定值的计数

时间:2013-11-11 18:12:46

标签: mysql sql count

我最近设置了一个连接到填充了复选框的表单的MYSQL数据库。如果选中该复选框,则会在关联列中插入值“1”;否则,它将收到值'0'。

我想最终查看此表单中的聚合数据,并想知道是否有任何方法可以使用MYSQL为每列获取一个数字,该数字等于具有值的行数'1'。

我尝试过各种变体:

select count(*) from POLLDATA group by column_name

这是不成功的,我认为没有别的东西似乎有意义(诚然,我在SQL中并不是很有经验)。

我真的想避免:

select count(*) from POLLDATA where column_1='1'
每列

(接近100列)。 除了为每列键入select count(*)语句之外,还有什么办法吗?

编辑:

如果有帮助,列为'artist1','artist2',....'artist88','gender','age','city','state'。当我试图在下面解释时,我希望我能够做到这样的事情:

select sum(EACH_COLUMN) from POLLDATA where gender='Male', city='New York City';

(显然EACH_COLUMN是假的)

5 个答案:

答案 0 :(得分:23)

SELECT SUM(CASE 
             WHEN t.your_column = '1' THEN 1
             ELSE 0
           END) AS OneCount,
       SUM(CASE 
             WHEN t.your_column='0' THEN 1
             ELSE 0
           END) AS ZeroCount
  FROM YOUR_TABLE t 

答案 1 :(得分:4)

如果您只想在列中查找1的绝对数字,您可以尝试...

select sum(col1), sum(col2), sum(col3) from POLLDATA

答案 2 :(得分:0)

而不是字符串为什么不存储实际数字,1或0。

然后你可以使用sql SUM函数。

答案 3 :(得分:0)

通过column_name从POLLDATA组中选择count(*)

我不认为你想要进行计数,因为这也会计算带有0的记录。

尝试

 select column_naam,sum(column_name) from POLLDATA group by column_name

select column_naam,count(*) from POLLDATA 
 where column_name <> 0 
 group by column_name

只添加0

答案 4 :(得分:0)

当查询开始有点过于复杂时,可能是因为你应该再考虑一下你的数据库结构。但是如果你想保持你的表不变,你可以使用一个自动计算所有总和的预准备语句,而不指定每一列:

SELECT
  CONCAT(
    'SELECT ',
    GROUP_CONCAT(CONCAT('SUM(', `column_name`, ') AS sum_', `column_name`)),
    ' FROM POLLDATA WHERE gender=? AND city=?')
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='POLLDATA'
       AND `column_name` LIKE 'artist%'
INTO @sql;

SET @gender := 'male';
SET @city := 'New York';

PREPARE stmt FROM @sql;
EXECUTE stmt USING @gender, @city;

请参阅小提琴here