distinct 多列 的 用法理解
阿新 • • 發佈:2019-01-22
程式碼基於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語句會報錯