天天看點

distinct去重多個字段_sql-distinct怎麼對其中某列去重還保留另外的列

我們在去重的時候,有幾種情況:

  1. 對某一列或者多列去重,即某列相同或者某幾列完全相同就去重
  2. 所有列相同時對這一列去重

假設有一張名為logs的表如下:

distinct去重多個字段_sql-distinct怎麼對其中某列去重還保留另外的列
我們先看幾種寫法:
  • 隻對單獨列去重并傳回單獨列時
SELECT  DISTINCT Num
FROM `logs`
           
distinct去重多個字段_sql-distinct怎麼對其中某列去重還保留另外的列

肯定符合我們的想法。

  • 隻對num列去重,并且保留Id列

這時候就有歧義了,當對num去重,顯示的Id列是哪個了?比如說:num為1時,Id有1,2,3,5,是保留1還是2還是3還是5?是以需要說明,這時候DISTINCT就失效了,

SELECT  Id, DISTINCT Num
FROM `logs`
           
上面的語句報錯。DISTINCT必須放在開頭。
SELECT  DISTINCT Num Id
FROM `logs`
           
上面的語句是對Num,Id兩列共同去重,并不是我們想要的。
SELECT max(Id), num
FROM `logs`
GROUP BY num
           
distinct去重多個字段_sql-distinct怎麼對其中某列去重還保留另外的列
這時候就需要用GROUP BY + MAX/MIN對Num分組篩選最大的Id還是最小的Id.

繼續閱讀