使用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 在對於有建立INDEX的TABLE查找的效率較佳,但DISTINCT在對於沒有INDEX的TABLE效率較佳,端看撰寫者所需來選用。
額外補充DISTINCT的特別用法
可以搭配COUNT()函式,針對某一個欄位做DISTINCT的計數,語句如下所示,表示計數不重複的user_id有多少個,計數不重複的order_status有多少個。
SELECT id, COUNT(DISTINCT user_id), order_date, COUNT(DISTINCT order_status)
FROM user_order
結果︰因為使用了COUNT()函式所以只會出現一筆資料,故這個方法只適合計次的SELECT
其它文章
沒有留言:
張貼留言