Mysql中的count()與sum()區別詳細介紹

來源:互聯網
上載者:User

首先建立個表說明問題 複製代碼 代碼如下: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門以上不及格者的平均成績。
經常會用兩種查詢語句有兩種: 複製代碼 代碼如下: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;

兩種查詢的結果肯定是不一樣的,肯定是第一種正確的,原因是為什麼,這時你就要想了,count()函數的意義和sum函數的意義
count()函數裡面的參數是列名的的時候,那麼會計算有值項的次數。
Sum()函數裡面的參數是列名的時候,是計算資料行名的值的相加,而不是有值項的總數。
對count()行數還要注意:它會計算總行數。不管你是否有值都會列入計算範圍。另外一點:mysqlisam引擎很容易獲得總行數的統計。查詢速度變得更快
歸納:實際編程中統計總行數是經常用到的。此時使用count(*)多處可見。我很少看到有人使用列名作為參數:count(a)的情況。即使是這樣使用,可能其初衷也是想統計行數。只是不知道!這樣所造成的細微差異而錯誤使用了"列名"的形式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.