當前位置:編程學習大全網 - 源碼破解 - MySQL_select distinct無法實現只對單列去重,並顯示多列結果的解決方法

MySQL_select distinct無法實現只對單列去重,並顯示多列結果的解決方法

可以看到表中的value字段有重復,如果想篩選去重,使用select distinct語句如下:

得到結果會是

| value

| a

| b

| c

| e

| f

篩選去重是實現了,可是只有選中的value列顯示了出來,如果我想知道對應的id呢?

嘗試壹下把id字段加入sql語句,如下:

得到結果:

| value | id

| a | 1

| b | 2

| c | 3

| c | 4

| e | 5

| f | 5

更換壹下sql語句中id和value的順序,如下:

得到結果:

| id |value

| 1 | a

| 2 | b

| 3 | c

| 4 | c

| 5 | e

| 5 | f

好像看明白它的作用結果了,只有id和value兩個字段同時重復時,select distinct語句才會把它列入“去重”清單

所以能看到id為3和4的value雖然都是4,但由於select語句中寫了id字段,它也默認會對id字段起效。

而且如果sql語句中把DISTINCT放到只想起效的字段前,那也是不行的....比如sql語句改為:

會提示sql報錯。

那到底怎麽樣能得到我想要的只對value字段內容去重,顯示結果又能保留其他字段內容呢....

找到的解決方法是使用group by函數,sql語句如下:

得到結果:

| min(id) |value

| 1 | a

| 2 | b

| 3 | c

| 5 | e

| 5 | f

完成目標了?!

如果把sql語句中的min()換成max()呢?

得到結果:

| min(id) |value

| 1 | a

| 2 | b

| 4 | c

| 5 | e

| 5 | f

也完成目標了?!

同時比對兩次sql運行結果可以發現,

第壹次使用min(id)時,由於重復結果存在兩條而id最小的為為3,符合min(id)的篩選條件,所以結果中把id等於4的重復記錄刪除了。

第二次使用max(id)時結果中,也就把id等於3的重復記錄刪除了

可以推論到假如還存在壹條id=5,value=c的記錄,使用max(id)時得到的結果裏就會是>5 c這條了。

再來嘗試壹下,如果min()和max()用在value字段裏呢:

得到結果:

| id |min(value)

| 1 | a

| 2 | b

| 3 | c

| 4 | c

| 5 | e

得到結果:

| id |min(value)

| 1 | a

| 2 | b

| 3 | c

| 4 | c

| 5 | f

再仔細想想,這種需求也只出現在不是那麽care顯示結果中,非去重目標字段的內容時才能使用,如果需要指定這些字段的值,可能篩選條件就不是min()和max()那麽簡單了....

以上。

  • 上一篇:加油愛人裏的陳圓圓誰演的
  • 下一篇:開機出現 stormset.exe 應用程序錯誤
  • copyright 2024編程學習大全網