1. 程式人生 > >distinct 多列 的 用法理解

distinct 多列 的 用法理解

程式碼基於mysql

在使用 mysql 時候經常遇到需要使用 distinct 語句的時候,首先我們知道對於單列檢索,distinct 返回唯一值

例如 原始圖表

corporation    number
   Alibaba      1001
   Tencent      1002
   Alibaba      1003
   Netease      1004

使用

SELECT  DISTINCT  corporation 
FROM  table   

返回

corporation    

   Alibaba      
   Tencent      
   Netease      

這個是沒問題 的

但是當我們只想得到每個公司的一個number時候,我們使用

SELECT DISTINCT  corporation,name 
FROM table

返回資料是原始資料,這裡也就是最容易引起疑惑的,

首先我們明確一點,DISTINCT 用在所有的檢測列之前,並且 它是作用於 所有列,不能部分使用

也就是類似

SELECT  id ,DISTINCT  corporation    

這種方式是錯誤的,那麼 在使用 distinct 時候,我們可以把它後面的 所有引數當成一個 也就是 DISTINCT (id,corporation) ,即只有 (id,corporation )這個組合的資料都相同時候,才會被“去重”,否則 還是會保留。

最後我們回到 題目,如果每個公司我只想得到一個代表就行 ,可以使用 group by 語句

SELECT  corporation ,MAX(number),
FROM  table 
GROUP BY  corporation

這樣對同一家公司,會保留number 最大的一行,返回

corporation    number

   Tencent      1002
   Alibaba      1003
   Netease      1004

這樣就達到目的,所以,當DISTINCT無法滿足只對單欄位去重,並希望結果中顯示對應的多欄位內容的時候,可以用group by函式實現。但要注意希望在結果中顯示的非去重目標欄位,需要對它們分別新增篩選條件的函式或方法,否則sql語句會報錯