mysql sum() sum(条件表达式) count() count(条件表达式) 总结

 

 

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

SUM(条件表达式),如果记录满足条件表达式就加1,统计满足条件的行数

 

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

COUNT(*)可以计算出行数,包括null

COUNT(1)也可以计算出行数,1在这里代表一行

 count(column)对特定的列的值具有的行数进行计算,不包含NULL值

COUNT(条件表达式),不管记录是否满足条件表达式,只要非NULL就加1

 

例子:

首先创建个表说明问题

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个正确,第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;

 

 转自:http://www.cnblogs.com/Alight/p/3967896.html

mysql统计行数优化:http://blog.csdn.net/coslay/article/details/46369725

 

性能问题

1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;

2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;

3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。

如果表没有主键,那么count(1)比count(*)快。

如果有主键,那么count(主键,联合主键)比count(*)快。

如果表只有一个字段,count(*)最快。

count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。 

 

猜你喜欢

转载自2379692ss.iteye.com/blog/2388254
今日推荐