① 資料庫中count的用法
資料庫中count的用法的用法你知道嗎?下面我就跟你們詳細介紹下資料庫中count的用法的用法,希望對你們有用。
資料庫中count的用法的用法如下:
count函數是用來統計表中或數組中記錄的一個函數,下面我來介紹在Mysql中count函數用法與性能比較吧。count(*) 它返回檢索行的數目, 不論其是否包含 NULL值。
SELECT 從一個表中檢索,而不檢索其它的列,並且沒有 WHERE子句時, COUNT(*)被優化到最快的返回速度。
例如:SELECT COUNT(*) FROM student;
COUNT(DISTINCT 欄位),返回不同的非NULL值數目;若找不到匹配的項,則COUNT(DISTINCT)返回 0 。
這個優化僅適用於 MyISAM表, 原因是這些表類型會儲存一個函數返回記錄的精確數量,而且非常容易訪問。
對於事務型的存儲引擎(InnoDB, BDB), 存儲一個精確行數的問題比較多,原因是可能會發生多重事物處理,而每個都可能會對行數產生影響。
例, 創建用於測試的數據表,以進行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
請注意以下查詢的返回結果:
1,select count(*) from `user`
2,select count(name) from `user`
3,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類型可以互補使用,就是看你需要什麼樣的數據了
② sql語句中count(0)和count(1)的區別
從SQL語句中count(0)和count(1)用法並無實質上差異。
SQL語句中COUNT函數是返回一個查詢的記錄數。
COUNT(expr), COUNT(*),一列中的值數(如果將一個列名指定為 expr)或表中的行數或組中的行值(如果指定 *)。COUNT(expr) 忽略空值,但 COUNT(*) 在計數中包含它們 。
SQL語句中COUNT函數括弧中可以填寫任何實數,能正常使用。
以下代碼COUNT函數括弧中使用實數>
Private Sub Form_Load()
Adodc3.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=jwl_dbf" '/count(備件代碼) as sj
Adodc3.RecordSource = "select count(1234.5) from jwl_jiec"
Adodc3.Refresh
zsl = Adodc3.Recordset.RecordCount
Set DataGrid1.DataSource = Adodc3
End Sub
運行界面如下:
③ sql中,count的用法.
Count
返回集合中項目的數量(具體數目取決於集合)。
語法
維度
Dimensions.Count
返回多維數據集中的維度數,其中包括 [Measures] 維度。
級別
«Dimension»|«Hierarchy».Levels.Count
返回維度或層次結構中的級別數,包括 [All] 級別(如果適用)。
集合 - 語法 1
Count(«Set»[, ExcludeEmpty | IncludeEmpty])
返回集合中的單元數。該語法允許分別使用 ExcludeEmpty 或 IncludeEmpty 標志來排除或包含空單元。
集合 - 語法 2
«Set».Count
返回集合中的單元數,其中包括空單元。
元組
«Tuple».Count
返回元組中的維度數。
說明 默認狀態下計算空的單元數。默認情況下,OLE DB 中可比較的 Count 函數不包含空單元。
注釋
若要從集合計數中排除空單元,請使用可選的 ExcludeEmpty 關鍵字。
示例
如果 Time 包含級別 Year 和 Month,Year 的成員是 1994 和 1995,那麼下面的示例返回 24:
集合 - 示例 1
Count({Time.Month.Members})
集合 - 示例 2
Time.Month.Members.Count
④ sql server中Select count(*)和Count(1)的區別和執行方式
在SQL
Server中Count(*)或者Count(1)或者Count([列])或許是最常用的聚合函數。很多人其實對這三者之間是區分不清的。本文會闡述這三者的作用,關系以及背後的原理。
往常我經常會看到一些所謂的優化建議不使用Count(*
)而是使用Count(1),從而可以提升性能,給出的理由是Count(
*)會帶來全表掃描。而實際上如何寫Count並沒有區別。
Count(1)和Count(*)實際上的意思是,評估Count()中的表達式是否為NULL,如果為NULL則不計數,而非NULL則會計數。比如我們看代碼1所示,在Count中指定NULL(優化器不允許顯式指定NULL,因此需要賦值給變數才能指定)。
DECLARE
@xx
INT
SET
@xx=NULL
SELECT
COUNT(@xx)
FROM
[AdventureWorks2012].[Sales].[SalesOrderHeader]
代碼清單1.Count中指定NULL
由於所有行都為NULL,則結果全不計數為0,結果如圖1所示。
圖1.顯而易見,結果為0
因此當你指定Count(*)
或者Count(1)或者無論Count(『anything')時結果都會一樣,因為這些值都不為NULL,如圖2所示。
圖2.只要在Count中指定非NULL表達式,結果沒有任何區別
那Count列呢?
對於Count(列)來說,同樣適用於上面規則,評估列中每一行的值是否為NULL,如果為NULL則不計數,不為NULL則計數。因此Count(列)會計算列或這列的組合不為空的計數。
那Count(*)具體如何執行?
前面提到Count(
)有不為NULL的值時,在SQL
Server中只需要找出具體表中不為NULL的行數即可,也就是所有行(如果一行值全為NULL則該行相當於不存在)。那麼最簡單的執行辦法是找一列NOT
NULL的列,如果該列有索引,則使用該索引,當然,為了性能,SQL
Server會選擇最窄的索引以減少IO。
我們在Adventureworks2012示例資料庫的[Person].[Address]表上刪除所有的非聚集索引,在ModifyDate這個數據類型為DateTime的列上建立索引,我們看執行計劃,如圖3所示:
圖3.使用了CreateDate的索引
我們繼續在StateProvinceID列上建立索引,該列為INT列,佔4位元組,相比之前8位元組
DateTime類型的列更短,因此SQL
Server選擇了StateProvinceID索引。如圖4所示。
圖4.選擇了更短的StateProvinceID索引
因此,如果某個表上Count(*)用的比較多時,考慮在一個最短的列建立一個單列索引,會極大的提升性能。
⑤ sql中 count(*) 和 count(1)啥區別
count(*) 可以統計所有的行數,包括為null的行
count(1) 統計的是第一個子欄位的行數,為null的行數 不統計。
sql 語句中 有時候1 代表對應的 第一個欄位,第二個欄位 一次類推。
⑥ sql語句中count的用法
a列有多少元素?你的意思應該是a列有多少個不同的元素吧?null算嗎?如果null不算,那麼count(distinct a)就可以。如果null算,那麼就要先看看有沒有null有的話就+1,具體的做法各個資料庫寫法上也會有所區別,這個就不寫了。
如果要比較三張表,那麼就需要交並補,那麼就需要用到union等語句關聯的寫法,各個資料庫也並不完全一致,根據資料庫選擇。
如元素要列出來,那麼直接distinct a 這樣就直接列出來了。
如果要知道每個元素的出現的次數,那麼就需要分組count了,a count(a)group by a
⑦ sql中count的用法
如下嗎?
selectcount(1)from(select*fromKcalendarwhereitem_captionlike'%國假%'
andKcalendar.Kguid=(selectmax(Kguid)fromKcalendar)
andLEFT(CONVERT(NVARCHAR,item_date,112),6)='201510')
AStab
⑧ sql中count函數的使用
COUNT() 函數返回匹配指定條件的行數。
SQL COUNT(column_name) 語法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):
SELECT COUNT(column_name) FROM table_name;
SQL COUNT(*) 語法
COUNT(*) 函數返回表中的記錄數:
SELECT COUNT(*) FROM table_name;
SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:
SELECT COUNT(DISTINCT column_name) FROM table_name;
注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。
SQL COUNT(column_name) 實例
下面的 SQL 語句計算 "access_log" 表中 "site_id"=3 的總訪問量:
實例
SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;
SQL COUNT(*) 實例
下面的 SQL 語句計算 "access_log" 表中總記錄數:
實例
SELECT COUNT(*) AS nums FROM access_log;
執行以上 SQL 輸出結果如下:
⑨ sql語句count怎麼使用
過多繁瑣的sql影響代碼質量,及維護成本,以下為兩種小技巧處理方式,僅供參考。
⑩ sql聚合函數中count(*) 和count(1),count(2)結果相同,為什麼
count(1),其實就是計算一共有多少符合條件的行。
1並不是表示第一個欄位,而是表示一個固定值。
其實就可以想成表中有這么一個欄位,這個欄位就是固定值1,count(1),就是計算一共有多少個1.。
同理,count(2),也可以,得到的值完全一樣,count('x'),count('y')都是可以的。一樣的理解方式。在你這個語句理都可以使用,返回的值完全是一樣的。就是計數。
count(*),執行時會把星號翻譯成欄位的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。