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. C#插入排序详解

    这几天一直在研究算法,也算有点心得,现在跟大家分享一下,我是用C#做的 排序算法是想要成为大虾程序员必须要掌握的技术,它其实也是一种思想,你对算法熟悉,对以后编程有很大帮助 算法思路 ⒈ 从第一个元素 ...

  2. 关于FireFox下 CSS3 transition 与其他浏览器的差异

    最近一个项目,动画效果全靠CSS3来做,用得比较多的transition,发现了一点火狐与其他浏览器的小差异. 首先我们写CSS的时候,一般为属性值为0的属性,我们一般会这样写 #id{ posito ...

  3. Result consisted of more than one row 错误的解决

    创建MySql的存储过程时,发生“Result consisted of more than one row”的错误. 存储过程的代码如下: )) BEGIN SELECT PetName into ...

  4. vmware ubuntu14.04虚拟机不能正常拷贝文件到windows且不能自适应虚拟机屏幕窗口自动变化的解决办法

    纠结于这个问题了半天.一直重复安装不同版本的vmare-tools, 一直没有任何效果.进入到/usr/bin/ 目录使用ll vm* 查看,发现和别的不同的是没有vmware-toolbox-cmd ...

  5. URL的格式scheme

    url scheme: scheme + (://) + userinfo + (@) + hostname + (:) + port + path + (?) + query + (#) + fra ...

  6. World’s Smallest h.264 Encoder

    转载 http://www.cardinalpeak.com/blog/worlds-smallest-h-264-encoder/ View from the Peak World’s Smalle ...

  7. VB.NET开发中遇到的一个小问题

    在修改公司用vb.net的写的代码时,遇到一个小问题 页面上有一个button, ID是btnNext, 在属性页中,它的click事件对应的是cmdNext, 我像在c#中一样,在属性页中双击cmd ...

  8. JMS开发(二):深入PTP,Pub-Sub两种模式

    1.PTP模型 PTP(Point-to-Point)模型是基于队列(Queue)的,对于PTP消息模型而言,它的消息目的是一个消息队列(Queue),消息生产者每次发送消息总是把消息送入消息队列中, ...

  9. <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别

      这些东西都是asp.net前台页面与后台代码交互过程中经常使用的,它们之间有的非常相似,又有一些不同.对比学习下,看看他们之间的联系与区别. 首先看<%%>与<scriptrun ...

  10. [PoC]某B2B网站的一个反射型XSS漏洞

    Author: Charlie 个人微博:http://YinYongYou.com 转载请注明出处. 工作过程纯粹手贱,测试了一下.然后发现了这么一个东西.有心利用能造成大范围影响.如可以自由修改用 ...