用count(*)还是count(列名) || Mysql中的count()与sum()区别

Mysql中的count()与sum()区别

首先创建个表说明问题

CREATE TABLE `result` (

`name` varchar(20) default NULL,

`subject` varchar(20) default NULL,

`score` tinyint(4) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8

插入一些数据,

insert into result values

(‘张三‘,‘数学‘,90),

(‘张三‘,‘语文‘,50),

(‘张三‘,‘地理‘,40),

(‘李四‘,‘语文‘,55),

(‘李四‘,‘政治‘,45),

(‘王五‘,‘政治‘,30),

(‘赵六‘,‘语文‘,100),

(‘赵六‘,‘数学‘,99),

(‘赵六‘,‘品德‘,98);

要求:查询出2门及2门以上不及格者的平均成绩。

经常会用两种查询语句有两种:

1. select name,sum(score < 60) ,avg(score)  from result  group by name having sum(score<60) >=2;

2.select name ,count((score<60)!=0) as a,avg(score) from result group by name having a >=2;

两种查询的结果肯定是不一样的,肯定是第一种正确的,原因是为什么,这时你就要想了,count()函数的意义和sum函数的意义

count()函数里面的参数是列名的的时候,那么会计算有值项的次数。 (NULL 不计入, 但是‘‘值计入)

COUNT(*)可以计算出行数,COUNT(1)也可以计算出行数,1在这里代表一行。 count()函数里面的参数是列名的的时候,那么会计算有值项的次数。

Count(*) 比 Count ([Column Name]) 快得多,COUNT(条件表达式),不管记录是否满足条件表达式,只要非NULL就加1;

Sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。SUM(条件表达式),如果记录满足条件表达式就加1

Sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。

当记录的列值为NULL时,COUNT(列名)和SUM(列名)都不计 这条记录。

归纳:实际编程中统计总行数是经常用到的。此时使用count(*)多处可见。

我很少看到有人使用列名作为参数:count(a)的情况。即使是这样使用,可能其初衷也是想统计行数。只是不知道!这样所造成的细微差异而错误使用了"列名"的形式。

时间: 2024-12-28 15:52:32

用count(*)还是count(列名) || Mysql中的count()与sum()区别的相关文章

mysql中使用count()统计的特殊之处

如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名?count()函数里面的参数是列名的的时候,那么会计算有值项的次数.也就是,该列没有值的项并不会进入计算范围.这样的话,你想统计的行数并不准确.更重要的是,还会增加消耗.因为,需要判断扫描所有行才知道值是否有值.如果使用count(*),它会计算总行数.不管你是否有值都会列入计算范围.另外一点:mysqlisam引擎很容易获得总行数的统计.查询速度变得更快归纳:实际编程中统计总行数是经常用到的.此时使用count

mysql中关于count的坑

结论,当列所在行值为 null 时,count(列名) 是不会把 null 值计算出来的.而count(*) , count(1) 等方式是会计算的. [1]mysql中关于count的坑 有什么坑呢?当 count(col1)时,col1所在列的行值为 null 时,不统计. [2]null 在count(*) / count(1) 和 count(col) 的区别 结论,当列所在行值为 null 时,count(列名) 是不会把 null 值计算出来的.而count(*) , count(1

mysql中char与varchar的区别分析

原文网址:http://www.jb51.net/article/23575.htm mysql中char与varchar的区别分析 作者: 字体:[增加 减小] 类型:转载 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符 varchar(13) 可变长 如'w

(转)MySQL中In与Exists的区别

背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists select * from user); #等价于 select * from user where exists (select 1); in查询就是先将子查询条件的记录全都查出来,假设结果集为B,共有m条记录,然后再将子查询条件的结果集分解成m个,再进行m次查询. select * from us

Mysql如何查字段的长度,Mysql中length()、char_length()的区别

1.今天发生了一件有意思的事情,传输的数据大于标准定的字段长度了,我把字段长度调大了,把数据传输过来了.谁知道,人家的数据不符合标准,要删除了重新搞,那么你如何将超长的数据删除呢,或者将超长的数据查询出来. 答:剧透一下,其实使用char_length()查询出来的,就可以把这些删除掉,然后将调大的字段长度调小就行了.备注,我实际操作的字段都是中文字符哈,别再写教程写出血案了. 2.先了解一下,Mysql中length().char_length()的区别. 1).length():mysql里

mysql中的count(primary_key)、count(1)、count(*)的区别

表结构如下: mysql> show create table user\G; *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `pwd` varchar(50) NOT N

mysql中的count()函数使用

有时候总认为count(*)会比count(1)或者count(column name)慢,事实上是分情况处理. 比如: ---初始化语句 建立一张表并插入数据: create table test2 (id BIGINT PRIMARY key, name varchar(24))ENGINE=INNODB; insert into test2(id,name)values(1,null); insert into test2(id,name)values(2,'name1'); insert

mysql中的count()函数

1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数. 2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录. (2)count(1)---忽略所有列,1表示一个固定值,也可以用count(2).count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录. (3)count(列名)---只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不

MySQL 中NULL和空值的区别 (转载 http://blog.sina.com.cn/s/blog_3f2a82610102v4dn.html)

平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解.注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效率的事情的发生. 问题 1: 首先,我们需要搞清楚 "空值" 和"NULL"的概念: 1:空值('')是不占用空间的 2: MySQL中的NULL其实是占用空间的.官方文档说明: “NULL columns require additional space in the