2011年12月27日 星期二

[MySQL]2-13 DISTINCT vs GROUP BY 的差異比較

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

















其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...