Mysql中的count()與sum()區(qū)別詳細(xì)介紹
更新時(shí)間:2012年11月12日 09:26:37 作者:
本文將介紹Mysql中的count()與sum()區(qū)別,需要的朋友可以參考下
首先創(chuàng)建個(gè)表說明問題
CREATE TABLE `result` (
`name` varchar(20) default NULL,
`subject` varchar(20) default NULL,
`score` tinyint(4) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
插入一些數(shù)據(jù),
insert into result values
('張三','數(shù)學(xué)',90),
('張三','語文',50),
('張三','地理',40),
('李四','語文',55),
('李四','政治',45),
('王五','政治',30),
('趙六','語文',100),
('趙六','數(shù)學(xué)',99),
('趙六','品德',98);
要求:查詢出2門及2門以上不及格者的平均成績(jī)。
經(jīng)常會(huì)用兩種查詢語句有兩種:
select name,sum(score < 60) ,avg(score) from result group by name having sum(score<60) >=2;
select name ,count((score<60)!=0) as a,avg(score) from result group by name having a >=2;
兩種查詢的結(jié)果肯定是不一樣的,肯定是第一種正確的,原因是為什么,這時(shí)你就要想了,count()函數(shù)的意義和sum函數(shù)的意義
count()函數(shù)里面的參數(shù)是列名的的時(shí)候,那么會(huì)計(jì)算有值項(xiàng)的次數(shù)。
Sum()函數(shù)里面的參數(shù)是列名的時(shí)候,是計(jì)算列名的值的相加,而不是有值項(xiàng)的總數(shù)。
對(duì)count()行數(shù)還要注意:它會(huì)計(jì)算總行數(shù)。不管你是否有值都會(huì)列入計(jì)算范圍。另外一點(diǎn):mysqlisam引擎很容易獲得總行數(shù)的統(tǒng)計(jì)。查詢速度變得更快
歸納:實(shí)際編程中統(tǒng)計(jì)總行數(shù)是經(jīng)常用到的。此時(shí)使用count(*)多處可見。我很少看到有人使用列名作為參數(shù):count(a)的情況。即使是這樣使用,可能其初衷也是想統(tǒng)計(jì)行數(shù)。只是不知道!這樣所造成的細(xì)微差異而錯(cuò)誤使用了"列名"的形式。
復(fù)制代碼 代碼如下:
CREATE TABLE `result` (
`name` varchar(20) default NULL,
`subject` varchar(20) default NULL,
`score` tinyint(4) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
插入一些數(shù)據(jù),
復(fù)制代碼 代碼如下:
insert into result values
('張三','數(shù)學(xué)',90),
('張三','語文',50),
('張三','地理',40),
('李四','語文',55),
('李四','政治',45),
('王五','政治',30),
('趙六','語文',100),
('趙六','數(shù)學(xué)',99),
('趙六','品德',98);
要求:查詢出2門及2門以上不及格者的平均成績(jī)。
經(jīng)常會(huì)用兩種查詢語句有兩種:
復(fù)制代碼 代碼如下:
select name,sum(score < 60) ,avg(score) from result group by name having sum(score<60) >=2;
復(fù)制代碼 代碼如下:
select name ,count((score<60)!=0) as a,avg(score) from result group by name having a >=2;
兩種查詢的結(jié)果肯定是不一樣的,肯定是第一種正確的,原因是為什么,這時(shí)你就要想了,count()函數(shù)的意義和sum函數(shù)的意義
count()函數(shù)里面的參數(shù)是列名的的時(shí)候,那么會(huì)計(jì)算有值項(xiàng)的次數(shù)。
Sum()函數(shù)里面的參數(shù)是列名的時(shí)候,是計(jì)算列名的值的相加,而不是有值項(xiàng)的總數(shù)。
對(duì)count()行數(shù)還要注意:它會(huì)計(jì)算總行數(shù)。不管你是否有值都會(huì)列入計(jì)算范圍。另外一點(diǎn):mysqlisam引擎很容易獲得總行數(shù)的統(tǒng)計(jì)。查詢速度變得更快
歸納:實(shí)際編程中統(tǒng)計(jì)總行數(shù)是經(jīng)常用到的。此時(shí)使用count(*)多處可見。我很少看到有人使用列名作為參數(shù):count(a)的情況。即使是這樣使用,可能其初衷也是想統(tǒng)計(jì)行數(shù)。只是不知道!這樣所造成的細(xì)微差異而錯(cuò)誤使用了"列名"的形式。
相關(guān)文章
阿里云配置MySQL-server?8.0遠(yuǎn)程登錄的實(shí)現(xiàn)
我們經(jīng)常會(huì)碰到需要遠(yuǎn)程訪問數(shù)據(jù)庫(kù)的場(chǎng)景,本文主要介紹了阿里云配置MySQL-server?8.0遠(yuǎn)程登錄的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
MySQL中使用case when 語句實(shí)現(xiàn)多條件查詢的方法
今天在一個(gè)應(yīng)用中使用到了一個(gè)比較特殊的數(shù)據(jù)查詢要求。需要的朋友可以參考下。2010-12-12
MySQL?數(shù)據(jù)庫(kù)整合攻略之表操作技巧與詳解
本文詳細(xì)介紹了MySQL數(shù)據(jù)庫(kù)中表的創(chuàng)建、查看、修改和刪除等操作技巧,感興趣的朋友一起看看吧2024-11-11
deepin 2014系統(tǒng)下安裝mysql數(shù)據(jù)庫(kù)的方法步驟
這篇文章主要給大家介紹了在deepin 2014系統(tǒng)下安裝mysql數(shù)據(jù)庫(kù)的方法步驟,文中通過圖文介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04
MySQL雙層游標(biāo)嵌套循環(huán)實(shí)現(xiàn)方法
要實(shí)現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個(gè)游標(biāo)相當(dāng)于一個(gè)for循環(huán),這里需要用到2個(gè)游標(biāo),如何在MySQL中實(shí)現(xiàn)游標(biāo)雙層循環(huán)呢,下面小編給大家分享MySQL雙層游標(biāo)嵌套循環(huán)方法,感興趣的朋友跟隨小編一起看看吧
2024-05-05 
