SQL Server中distinct的用法
distinct這個關鍵字用來過濾掉多餘的重複記錄只保留一條,但往往只用它來返回不重複記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只有用二重迴圈查詢來解決,而這樣對於一個資料量非常大的站來說,無疑是會直接影響到效率的。
下面先來看看例子:
table表
欄位1 欄位2
id name
1 a
2 b
3 c
4 c
5 b
庫結構大概這樣,這只是一個簡單的例子,實際情況會複雜得多。
比如我想用一條語句查詢得到name不重複的所有資料,那就必須
使用distinct去掉多餘的重複記錄。
select distinct name from table
得到的結果是:
----------
name
a
b
c
好像達到效果了,可是,我想要得到的是id值呢?改一下查詢語句吧:
select distinct name, id from table
結果會是:
----------
id name
1 a
2 b
3 c
4 c
5 b
distinct怎麼沒起作用?作用是起了的,不過他同時作用了兩個
欄位,也就是必須得id與name都相同的才會被排除
我們再改改查詢語句:
select id, distinct name from table
很遺憾,除了錯誤資訊你什麼也得不到,distinct必須放在開頭。難到不能把distinct放到where條件裡?能,照樣報錯。
--------------------------------------------------------
下面方法可行:
select *, count(distinct name) from table group by name
結果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最後一項是多餘的,不用管就行了,目的達到
group by 必須放在 order by 和 limit之前,不然會報錯
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-672790/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql - distinct 去重複的用法SQL
- SQL Server中@@ROWCOUNT的用法SQLServer
- SQL Server中的dbcc page命令用法SQLServer
- SQL Server中的dbcc ind命令用法SQLServer
- SQL Server中的鎖型別及用法SQLServer型別
- sql server with ...as 用法SQLServer
- SQL server 中SUBSTRING()以及CONVERT()的用法SQLServer
- Sql server with as update用法SQLServer
- sql server merge 的用法SQLServer
- Sql server 2005中output用法解析SQLServer
- sql server convert用法SQLServer
- Sql Server Rollup 語句的用法SQLServer
- SQL Server中row_number函式的常見用法SQLServer函式
- SQL 中With as 的用法SQL
- sql server select case when的用法SQLServer
- PostgreSQL 資料庫中 DISTINCT 關鍵字的 4 種用法SQL資料庫
- 初探SQL Server CE + Codesmith用法SQLServerMIT
- sql server 2005中的分割槽函式用法(partition by 欄位)SQLServer函式
- SQL Server中,WITH AS的使用SQLServer
- SQL中的遞迴用法SQL遞迴
- SQL中Merge的用法SQL
- 轉 sql 中 case 的用法SQL
- [zt] SQL Server管理員必備的DBCC用法SQLServer
- SQL Server資料庫中Substring函式的用法例項詳解SQLServer資料庫函式
- SQL -去重Group by 和Distinct的效率SQL
- SQL server中的NULL值SQLServerNull
- SQL Server中tempdb的管理SQLServer
- pl/sql中bulk collect的用法SQL
- 對含distinct操作的SQL的優化SQL優化
- SQL SERVER中SQL優化SQLServer優化
- [zt] 使用SQL Server中的Linked Server及Remote ServerSQLServerREM
- SQL資料庫中Truncate的用法SQL資料庫
- sql中union和union all的用法SQL
- SQL中的case when then else end用法SQL
- SQL中IN和EXISTS用法的區別SQL
- SQL SERVER中的頁和區SQLServer
- SQL Server 中的稀疏列支援SQLServer
- 細說SQL Server中的加密SQLServer加密