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)的情况。即使是这样使用,可能其初衷也是想统计行数。只是不知道!这样所造成的细微差异而错误使用了"列名"的形式。

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

  1. 重新认识MySQL中的COUNT语句

    在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...

  2. MySql中的count、NULL和空串的区别

    **1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...

  3. (转)MySQL中In与Exists的区别

    背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists s ...

  4. MySQL中interactive_timeout和wait_timeout的区别【转】

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL s ...

  5. Mysql中函数和存储过程的区别

    Mysql中函数和存储过程的区别 存储过程: 1.       可以写sql语句 2.       inout,out构造返回值 3.       调用:call:存储过程名称 4.       可以 ...

  6. mysql中in和exist的区别

    mysql中in和exists的区别 -- in写法select * from A where A.id in (select bid from  B ) and A.name in (select ...

  7. MySQL中 utf8与utf8mb4的区别

    MySQL中 utf8与utf8mb4的区别 一.简介 ​ MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在 ...

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

    表结构如下: mysql> show create table user\G; *************************** 1. row ********************** ...

  9. 关于mysql中的count()函数

    1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数. 2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会 ...

随机推荐

  1. ubuntu下php5扩展mysqli

    看网上说的都是自己编译源码,试了一下其实这样就可以了 sudo apt-get instal php5-mysql

  2. OnItemClickListener 的参数详解(转)

    转载地址:http://blog.iamzsx.me/show.html?id=147001 我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget. ...

  3. ORA-15124 数据库启动阶段报错

    重新进行启动数据库的时候报错: SQL> startup nomount; ORA-15124: ASM file name '+KEL/ipap/controlfile/control02.c ...

  4. HTML 5:绘制旋转的太极图

    HTML: <!DOCTYPE> <html> <head> <meta charset="utf-8" /> <title& ...

  5. Ubuntu 12.04 安装wine1.7

    从源码安装wine 我的系统环境:ubuntu 12.04.4 X64 wine版本:wine-1.7.12.tar.bz2 解压:tar -xvf wine-1.7.12.tar.bz2 进入win ...

  6. Maven管理多模块项目

    首先,我们要明确的多模块项目的含义,它是指一个应用中包含多个module.一般来说,一个应用单独部署成服务,只是打包的时候,maven会把各个module组合在一起.各模块一般单独打成jar放到lib ...

  7. [转]sublime 使用技巧总结

    原文链接:http://www.cnblogs.com/yingzi/archive/2012/04/24/2469056.html 对于用惯了editplus的人来说,突然接触到sublime有点无 ...

  8. 自动化运维工具ansible-如何设置客户端多python版本问题

    问题:在使用ansible进行管理客户主机时,发现客户主机安装了多个版本的python,并且默认版本为3.0 shell>>cat list 192.168.2.9 shell>&g ...

  9. Spring AOP + AspectJ in XML configuration example

    For those don't like annotation or using JDK 1.4, you can use AspectJ in XML based instead. Review l ...

  10. 做XH2.54杜邦线材料-导线

    好多市场上买的杜邦线质量一般,今天选了一种别的线 线色:红 黑   黄 绿 白 棕 蓝 线规:正标UL1007-24AWG 产品说明:          * UL1007电子连接线   * 线号:24 ...