用count(*)仍是count(列名) || Mysql中的count()與sum()區別

mysql中COUNT與SUM的區別html

首先建立個表說明問題mysql

CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NULL, `score` tinyint(4) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8

 

插入一些數據,sql

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()函數裏面的參數是列名的時候,是計算列名的值的相加,而不是有值項的總數。 spa

當記錄的列值爲NULL時,COUNT(列名)和SUM(列名)都不計 這條記錄。
 
 
 
概括:實際 編程中統計總行數是常常用到的。此時使用count(*)多處可見。
我不多看到有人使用列名做爲參數:count(a)的狀況。即便是這樣使用,可能其初衷也是想統計行數。只是不知道!這樣所形成的細微差別而錯誤使用了"列名"的形式。
 
 
轉載自:https://www.cnblogs.com/Alight/p/3967896.html
相關文章
相關標籤/搜索