程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql count詳解及函數實例代碼

mysql count詳解及函數實例代碼

編輯:MySQL綜合教程

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類型可以互補運用,就是看你需求什麼樣的數據了

 感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved