mysql數據分組和排序及SELECT子句順序

mysql分組和排序

雖然 GROUP BY 和 ORDER BY 經常完成相同的工作,但它們是非常不同的。下表匯總了它們之間的差別。

mysql數據分組和排序及SELECT子句順序

表中列出的第一項差別極為重要。我們經常發現用 GROUP BY 分組的數據確實是以分組順序輸出的。但情況并不總是這樣,它并不是SQL規范所要求的。此外,用戶也可能會要求以不同于分組的順序排序。僅因為你以某種方式分組數據(獲得特定的分組聚集值),并不表示你需要以相同的方式排序輸出。應該提供明確的 ORDER BY 子句,即使其效果等同于 GROUP BY子句也是如此。

不要忘記 ORDER BY :一般在使用 GROUP BY 子句時,應該也給出 ORDER BY 子句。這是保證數據正確排序的唯一方法。千萬不要僅依賴 GROUP BY 排序數據。為說明 GROUP BY 和 ORDER BY 的使用方法,請看一個例子。下面的

select 語句類似于前面那些例子。它檢索總計訂單價格大于等于 50 的訂單的訂單號和總計訂單價格:

輸入:

select?order_num,sum(quantity*item_price)?as?ordertotal?from?orderitems?group?by?order_num?having?sum(quantity*item_price)?>=?50;

輸出:

mysql數據分組和排序及SELECT子句順序

為按總計訂單價格排序輸出,需要添加 ORDER BY 子句,如下所示:

輸入:

select?order_num,sum(quantity*item_price)?as?ordertotal?from?orderitems?group?by?order_num?having?sum(quantity*item_price)?>=?50?order?by?ordertotal;

輸出:

mysql數據分組和排序及SELECT子句順序

分析:在這個例子中, GROUP BY 子句用來按訂單號( order_num 列)分組數據,以便 SUM(*) 函數能夠返回總計訂單價格。 HAVING 子句過濾數據,使得只返回總計訂單價格大于等于 50 的訂單。最后,用 ORDER?BY 子句排序輸出。

SELECT子句順序

下面回顧一下 SELECT 語句中子句的順序。表13-2以在 SELECT 語句中使用時必須遵循的次序,列出迄今為止所學過的子句。

mysql數據分組和排序及SELECT子句順序

mysql數據分組和排序及SELECT子句順序

【相關推薦】

  1. mysql數據分組:創建分組

  2. mysql數據分組:創建分組

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享