惠菁 發問時間: 電腦與網際網路程式設計 · 1 0 年前

關於SQL的 distinct 與 group 的差別?

請問各位大大,

select distinct 欄位一, 欄位二, 欄位三 from ...

select 欄位一, 欄位二, 欄位三 from ...

group by 欄位一, 欄位二, 欄位三

二個SQL的結果會是一樣的,

使用上有何差別?

2 個解答

評分
  • 1 0 年前
    最佳解答

    簡單說 GROUP BY 是在做群集,以便於進行彙總計算之用;而 DISTINCT 則是用來排除重複的資料;其使用的時機並不相同。

    就你所舉的例子,由於沒有在 GROUP BY 中使用到彙總函數,所以會覺得跟 DISTINCT 的結果一模一樣,但如果用工具記錄下兩者所花費的執行時間,你會發現,單純選取不重複的資料行時,使用 GROUP BY 會比 DISTINCT 花更多的時間,尤其在你的資料表龐大或需要多個資料表的關聯時,感受會特別明顯。

    這是因為在 SQL 中,使用 DISTINCT 是直接將資料行選取出來後,直接排除掉重複的資料行即為結果,所需要的 CPU 計算時間比較少;而使用 GROUP BY 則選出資料集後先將資料集進行排序、分組等動作,最後再在每個組別中抽出任一資料行做為結果,CPU 需要花費比較多的計算時間來處理這一連串的過程。

    為了養成良好的習慣,建議你根據目的的不同來撰寫 SQL 指令,如果只是要選出不重複的資料行,還是儘量使用 DISTINCT 會比較好!

  • 1 0 年前

    select distinct純粹只選出不重複的欄位組,而Group by 使用上會加上一些函數如sum(),如 "select 欄位一, 欄位二, 欄位三, sum(欄位四) group by 欄位一, 欄位二, 欄位三 " 意思是依照欄位一, 欄位二, 欄位三的值分群去計算(sum)欄位四的值,當然你若不使用function效果跟select distinct一樣,只是沒使用到group by 的精神

還有問題?馬上發問,尋求解答。