1. 程式人生 > >完美解決SQL語句distinct的多列問題

完美解決SQL語句distinct的多列問題

distinct 多列問題結合group by的解決方法

 

表 table1 
id RegName PostionSN PersonSN 
1 山東齊魯製藥 223 2 
2 山東齊魯製藥 224 2 
3 北京城建公司 225 2 
4 科技公司 225 2 

我想獲得結果是 

id RegName PostionSN PersonSN 
1 山東齊魯製藥 223 2 
3 北京城建公司 225 2 
4 科技公司 225 2 

select distinct RegName,PostionSN,PersonSN from table1 

如果查詢的是多列 distinct 用和不用一樣 

只能用group by 

用group by RegName 
select * from table1 where id in (select min(id) from table1 group by RegName) and PersonSN=2

 

 

 

SQLSever中diatinct的用法(不重複的錄)

 

 

下面先來看看例子:

table表

欄位1 欄位2
id name
1 a
2 b
3 c
4 c
5 b

庫結構大概這樣,這只是一個簡單的例子,實際情況會複雜得多。

比如我想用一條語句查詢得到name不重複的所有資料,那就必須

使用distinct去掉多餘的重複記錄。

select distinct name from table
得到的結果是:

----------

name
a

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之前,不然會報錯

 

本文轉自:http://www.jb51.net/article/23813.htm

http://www.jb51.net/article/24717.htm

1 山東齊魯製藥 223 2 
2 山東齊魯製藥 224 2 
3 北京城建公司 225 2 
4 科技公司 225 2 

我想獲得結果是 

id RegName PostionSN PersonSN 
1 山東齊魯製藥 223 2 
3 北京城建公司 225 2 
4 科技公司 225 2 

select distinct RegName,PostionSN,PersonSN from table1 

如果查詢的是多列 distinct 用和不用一樣 

只能用group by 

用group by RegName 
select * from table1 where id in (select min(id) from table1 group by RegName) and PersonSN=2