获取列值不为NULL的每列计数

时间:2013-08-08 07:00:52

标签: mysql count

表格中有一个表格和5列。我想要列值不为null的每列的行计数。

column1 column2 column3 column4 column5
1        2        2       2        2
2        2        2       NULL     2     
3        NULL     2       2        NULL
NULL     NULL     2       2        NULL
NULL     NULL     2       2        NULL

我应该得到像3,2,5,4,2

这样的输出

5 个答案:

答案 0 :(得分:4)

这样的东西
SELECT 
COUNT(Column1),
COUNT(Column2),
COUNT(Column3),
COUNT(Column4),
COUNT(Column5)
FROM Table1

SQL Fiddle DEMO

来自COUNT(expr)

  

返回行中expr的非NULL值的数量   通过SELECT语句检索。

     

COUNT(*)有点不同,它返回的计数   检索的行数,无论它们是否包含NULL值。

答案 1 :(得分:4)

提供的解决方案对我不起作用。我必须按如下方式修改代码:

SELECT 
COUNT(NULLIF(Column1,'')),
COUNT(NULLIF(Column2,'')),
COUNT(NULLIF(Column3,'')),
COUNT(NULLIF(Column4,'')),
COUNT(NULLIF(Column5,''))
FROM Table1

答案 2 :(得分:1)

根据COUNT()函数引用,它只计算非NULL项。所以,

SELECT
  COUNT(column1) AS column1,
  COUNT(column2) AS column2,
  COUNT(column3) AS column3,
  COUNT(column4) AS column4,
  COUNT(column5) AS column5
FROM yourtable;

应该返回您想要的信息。

答案 3 :(得分:1)

我认为上面的回复 - 只是确保字段名称按照它们在两个区域中的顺序匹配。

select column1, column2, column3, column4, column5

from ( select

  sum(column1 is not null) as column1,

  sum(column2 is not null) as column2,

  sum(column3 is not null) as column3,

  sum(column4 is not null) as column4,

  sum(column5 is not null) as column5

from mytable) x

答案 4 :(得分:0)

您可以使用子查询:

select column1, column2, column3, column4, column5
from ( select
  sum(column1 is not null) as column1,
  sum(column2 is not null) as column2,
  sum(column3 is not null) as column3,
  sum(column4 is not null) as column4,
  sum(column5 is not null) as column5
from mytable) x
相关问题