Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅当字段已填充时计数_Mysql_Sql - Fatal编程技术网

Mysql 仅当字段已填充时计数

Mysql 仅当字段已填充时计数,mysql,sql,Mysql,Sql,我有一个关于我要编写的SQL查询的问题。假设我在表:school中有一个列,列的值如下:grades SUI grades | Score 2 9 2 2 9 5 4 1 5 4 1 5 4 6 1 1 6 1 现在我想要一个输出,其中它对SUI进行分组,仅当分数已填充时才计算分数。因此,我的输出将是: SUI Count 2 1

我有一个关于我要编写的SQL查询的问题。假设我在表:school中有一个列,列的值如下:grades

 SUI grades | Score
  2  9          2
  2  9          
  5  4          1
  5  4          1
  5  4
  6  1          1
  6  1          
现在我想要一个输出,其中它对SUI进行分组,仅当分数已填充时才计算分数。因此,我的输出将是:

SUI Count 
 2    1
 5    2
 6    1
count忽略空值,因此可以使用having条件:

SELECT   sui, COUNT(score)
FROM     mytable
GROUP BY sui
HAVING   COUNT(score) > 0

我会在聚合之前进行筛选:

SELECT sui, COUNT(*)
FROM t
WHERE score IS NOT NULL
GROUP BY sui;

如果值为空且不为NULL,则可以使用函数 它将只计算其中包含值的字段

SELECT SUI, Count(Grades)
FROM mytable 
WHERE Score <> ''
GROUP BY SUI

在预期结果中,您不是指5 2而不是4 2吗?您自己尝试过什么?countcolumnname计算非空值!是的意思是5而不是4,但是分数是否声明为NULL而不是notnull,并且没有看到空字符串?问题是分数是一个varchar。它也可以充满words@the_boy_za这不应该是一个问题-你只是在计算它存在的行数,而不是对它进行任何计算,例如,SumGrades列呢?@the_boy_za。它不是NULL,所以COUNT*和COUNTgrades做相同的事情。