DISTINCT GROUP BY 都是用來做去除重複資料的關鍵字,但用法不同,以下將針對這兩種做比較介紹


使用DISTINCT,必須放在SELECT區塊內第一個欄位的前方,如下列語句所示位置,其代表的意義是後面所跟的所有欄位都必須相同才能算重複的資料,換言之如果確認欲查出的欄位必須同時去除重複資料才能使用這個。
SELECT      DISTINCT id, user_id, order_date, order_status
FROM         user_order
ORDER BY id

結果︰














使用GROUP BY,必須放在WHERE區塊之後ORDER BY之前,如下列語句所示位置,其後跟隨撰寫者想要去除重複資料的欄位名稱,代表的意義是後面所跟的所有欄位都必須相同才能算重複的資料,下列語句結果會與上方DISTINCT的結果相同,因為兩個所限制的欄位都相同。
SELECT      id, user_id, order_date, order_status
FROM         user_order
GROUP BY id, user_id, order_date, order_status
ORDER BY id

結果︰














使用GROUP BY,本次所限制的欄位與上兩個語句不同,當user_id, order_status兩欄位相同就算重複的資料,結果就會與上方語句不同了。
SELECT      id, user_id, order_date, order_status
FROM         user_order
GROUP BY user_id, order_status
ORDER BY id

結果︰












總結︰DISTINCT會與要查找的欄位交互影響,有時候不是那麼好用,GROUP BY則沒有此限制,且GROUP BY 在對於有建立INDEXTABLE查找的效率較佳,但DISTINCT在對於沒有INDEXTABLE效率較佳,端看撰寫者所需來選用。



額外補充DISTINCT的特別用法
可以搭配COUNT()函式,針對某一個欄位做DISTINCT的計數,語句如下所示,表示計數不重複的user_id有多少個,計數不重複的order_status有多少個。
SELECT id, COUNT(DISTINCT user_id), order_date, COUNT(DISTINCT order_status)
FROM    user_order

結果︰因為使用了COUNT()函式所以只會出現一筆資料,故這個方法只適合計次的SELECT





 
















其它文章

arrow
arrow

    PG Levin Li 發表在 痞客邦 留言(0) 人氣()