Mysql中的count()與sum()區別

Mysql中的count()與sum()區別mysql

 

首先建立個表說明問題sql

 

CREATE TABLE `result` (編程

 

  `name` varchar(20) default NULL,ide

 

  `subject` varchar(20) default NULL,函數

 

  `score` tinyint(4) default NULLget

 

) ENGINE=MyISAM DEFAULT CHARSET=utf8數學

  www.2cto.com  it

插入一些數據,io

 

insert into result valuesmysqli

 

('張三','數學',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;

  www.2cto.com  

兩種查詢的結果確定是不同的,確定是第一種正確的,緣由是爲何,這時你就要想了,count()函數的意義和sum函數的意義

 

count()函數裏面的參數是列名的的時候,那麼會計算有值項的次數。

 

Sum()函數裏面的參數是列名的時候,是計算列名的值的相加,而不是有值項的總數。

 

對count()行數還要注意:它會計算總行數。無論你是否有值都會列入計算範圍。另一點:mysqlisam引擎很容易得到總行數的統計。查詢速度變得更快

概括:實際編程中統計總行數是常常用到的。此時使用count(*)多處可見。我不多看到有人使用列名做爲參數:count(a)的狀況。即便是這樣使用,可能其初衷也是想統計行數。只是不知道!這樣所形成的細微差別而錯誤使用了"列名"的形式。

相關文章
相關標籤/搜索