mysql count詳解及函數實例代碼。本站提示廣大學習愛好者:(mysql count詳解及函數實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql count詳解及函數實例代碼正文
mysql count詳解
count函數是用來統計表中或數組中記載的一個函數,上面我來引見在mysql中count函數用法。
count(*) 它前往檢索行的數目, 不管其能否包括 NULL值。
SELECT 從一個表中檢索,而不檢索其它的列,並且沒有 WHERE子句時, COUNT(*)被優化到最快的前往速度。
例如:
mysql> SELECT COUNT(*) FROM student;
COUNT(DISTINCT 字段)這個優化僅適用於 MyISAM表, 緣由是這些表類型會貯存一個函數前往記載的准確數量,而且十分容易訪問。
關於事務型的存儲引擎(InnoDB, BDB), 存儲一個准確行數的問題比擬多,緣由是能夠會發作多重事物處置,而每個都能夠會對行數發生影響。
前往不同的非NULL值數目。
若找不到婚配的項,則COUNT(DISTINCT)前往 0 。
例
創立用於測試的數據表,以停止count數據統計:
CREATE TABLE `user` ( `id` int(5) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `password` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 測試數據為: 1 name1 123456 2 name2 123456 3 name3 123456 4 name4 NULL
請留意以下查詢的前往後果
select count(*) from `user` select count(name) from `user` select count(password) from `user`
輸入後果:4,4,3
緣由剖析:
1.count(*)是對行數目停止計數,所以後果為4。
2.count(column_name)是對列中不為空的行停止計數,所以count(name)=4,而count(password)=3。
以上二點,在運用count函數時,要留意下。
運用GROUP BY對每個owner的一切記載分組,沒有它,你會失掉錯誤音訊:
mysql> SELECT owner, COUNT(*) FROM pet; ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
COUNT( )和GROUP BY以各種方式分類你的數據。下列例子顯示出停止植物普查操作的不同方式。
每種植物的數量:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species; +---------+----------+ | species | COUNT(*) | +---------+----------+ | bird | 2 | | cat | 2 | | dog | 3 | | hamster | 1 | | snake | 1 | +---------+----------+
每種性別的植物數量:
mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex; +------+----------+ | sex | COUNT(*) | +------+----------+ | NULL | 1 | | f | 4 | | m | 4 | +------+----------+
(在這個輸 出中,NULL表示“未知性別”。)
按品種和性別組合的植物數量:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | NULL | 1 | | bird | f | 1 | | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+
若運用COUNT( ),你不用檢索整個表。例如, 後面的查詢,當只對狗和貓停止時,應為:
mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE species = 'dog' OR species = 'cat' -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | +---------+------+----------+
或, 假如你僅需求知道已知性別的按性別的植物數目:
mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE sex IS NOT NULL -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | f | 1 | | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+
特地提下mysql的DISTINCT的關鍵字有很多你想不到的用途
1.在count 不反復的記載的時分能用到
比方SELECT COUNT( DISTINCT id ) FROM tablename;
就是計算talbebname表中id不同的記載有多少條
2,在需求前往記載不同的id的詳細值的時分可以用
比方SELECT DISTINCT id FROM tablename;
前往talbebname表中不同的id的詳細的值
3.下面的狀況2關於需求前往mysql表中2列以上的後果時會有歧義
比方SELECT DISTINCT id, type FROM tablename;
實踐上前往的是 id與type同時不相反的後果,也就是DISTINCT同時作用了兩個字段,必需得id與tyoe都相反的才被掃除了,與我們希冀的後果不一樣
4.這時分可以思索運用group_concat函數來停止掃除,不過這個mysql函數是在mysql4.1以上才支持的
5.其實還有另外一種處理方式,就是運用
SELECT id, type, count(DISTINCT id) FROM tablename
雖然這樣的前往後果多了一列無用的count數據(或許你就需求這個我說的無用數據)
前往的後果是 只要id不同的一切後果和下面的4類型可以互補運用,就是看你需求什麼樣的數據了
感激閱讀,希望能協助到大家,謝謝大家對本站的支持!