Mysql中的count()與sum()區(qū)別詳細(xì)介紹
更新時間:2012年11月12日 09:26:37 作者:
本文將介紹Mysql中的count()與sum()區(qū)別,需要的朋友可以參考下
首先創(chuàng)建個表說明問題
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īng)常會用兩種查詢語句有兩種:
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é)果肯定是不一樣的,肯定是第一種正確的,原因是為什么,這時你就要想了,count()函數(shù)的意義和sum函數(shù)的意義
count()函數(shù)里面的參數(shù)是列名的的時候,那么會計(jì)算有值項(xiàng)的次數(shù)。
Sum()函數(shù)里面的參數(shù)是列名的時候,是計(jì)算列名的值的相加,而不是有值項(xiàng)的總數(shù)。
對count()行數(shù)還要注意:它會計(jì)算總行數(shù)。不管你是否有值都會列入計(jì)算范圍。另外一點(diǎn):mysqlisam引擎很容易獲得總行數(shù)的統(tǒng)計(jì)。查詢速度變得更快
歸納:實(shí)際編程中統(tǒng)計(jì)總行數(shù)是經(jīng)常用到的。此時使用count(*)多處可見。我很少看到有人使用列名作為參數(shù):count(a)的情況。即使是這樣使用,可能其初衷也是想統(tǒng)計(jì)行數(shù)。只是不知道!這樣所造成的細(xì)微差異而錯誤使用了"列名"的形式。
復(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īng)常會用兩種查詢語句有兩種:
復(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é)果肯定是不一樣的,肯定是第一種正確的,原因是為什么,這時你就要想了,count()函數(shù)的意義和sum函數(shù)的意義
count()函數(shù)里面的參數(shù)是列名的的時候,那么會計(jì)算有值項(xiàng)的次數(shù)。
Sum()函數(shù)里面的參數(shù)是列名的時候,是計(jì)算列名的值的相加,而不是有值項(xiàng)的總數(shù)。
對count()行數(shù)還要注意:它會計(jì)算總行數(shù)。不管你是否有值都會列入計(jì)算范圍。另外一點(diǎn):mysqlisam引擎很容易獲得總行數(shù)的統(tǒng)計(jì)。查詢速度變得更快
歸納:實(shí)際編程中統(tǒng)計(jì)總行數(shù)是經(jīng)常用到的。此時使用count(*)多處可見。我很少看到有人使用列名作為參數(shù):count(a)的情況。即使是這樣使用,可能其初衷也是想統(tǒng)計(jì)行數(shù)。只是不知道!這樣所造成的細(xì)微差異而錯誤使用了"列名"的形式。
相關(guān)文章
阿里云配置MySQL-server?8.0遠(yuǎn)程登錄的實(shí)現(xiàn)
我們經(jīng)常會碰到需要遠(yuǎn)程訪問數(shù)據(jù)庫的場景,本文主要介紹了阿里云配置MySQL-server?8.0遠(yuǎn)程登錄的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08
MySQL中使用case when 語句實(shí)現(xiàn)多條件查詢的方法
今天在一個應(yīng)用中使用到了一個比較特殊的數(shù)據(jù)查詢要求。需要的朋友可以參考下。2010-12-12
MySQL?數(shù)據(jù)庫整合攻略之表操作技巧與詳解
本文詳細(xì)介紹了MySQL數(shù)據(jù)庫中表的創(chuàng)建、查看、修改和刪除等操作技巧,感興趣的朋友一起看看吧2024-11-11
deepin 2014系統(tǒng)下安裝mysql數(shù)據(jù)庫的方法步驟
這篇文章主要給大家介紹了在deepin 2014系統(tǒng)下安裝mysql數(shù)據(jù)庫的方法步驟,文中通過圖文介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04
MySql數(shù)據(jù)庫基礎(chǔ)之子查詢詳解
所謂子查詢是指在一個查詢中嵌套了其他的若干查詢,即在一個SELECT查詢語句的WHERE或FROM子句中包含另一個SELECT查詢語句,下面這篇文章主要給大家介紹了關(guān)于MySQL子查詢的相關(guān)資料,需要的朋友可以參考下2022-09-09
MySQL雙層游標(biāo)嵌套循環(huán)實(shí)現(xiàn)方法
要實(shí)現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個游標(biāo)相當(dāng)于一個for循環(huán),這里需要用到2個游標(biāo),如何在MySQL中實(shí)現(xiàn)游標(biāo)雙層循環(huán)呢,下面小編給大家分享MySQL雙層游標(biāo)嵌套循環(huán)方法,感興趣的朋友跟隨小編一起看看吧2024-05-05

