Navicat 部落格

將 SQL COUNT() 函式與 GROUP BY 一起使用 2021 年 5 月 28 日,由 Robert Gravelle 撰寫

早在 2020 年 8 月,SQL Count() 函式的多種變體文章概述了 COUNT 的許多輸入參數變化。使用 COUNT() 函式的另一種方法是將其與 GROUP BY 子句一起使用。將 COUNT() 函式與 GROUP BY 結合使用,可以根據不同的分組來細分計數。在今天的文章中,我們將學習如何使用 Navicat Premium 作為資料庫用戶端査詢 Sakila 範例資料庫,根據不同的準則分組計數。

案例 1:演出過大多數 PG 電影的演員

COUNT() 函式本身可以告訴我們有多少演員在 PG 電影中演出。但是,如果我們想知道每個演員都演出了多少部 PG 電影,我們需要在 GROUP BY 子句中加入 actor_id。回想一下,GROUP BY 子句將記錄分組到摘要列中,並為每個組傳回一筆記錄。GROUP BY 査詢通常包括彙總函式,如 COUNT、MAX、SUM、AVG 等。

以下是 SELECT 陳述式以及查詢結果,如 Navicat Premium 所示:

actors_who_have_appeared_in_most_pg_movies (105K)

注意,在使用 GROUP BY 時,我們還可以以遞減順序來排序記錄,這樣在電影攝影中 PG 電影數量最多的演員就會出現在結果的頂部。

案例 2:每天租借的電影數量

套用 COUNT() 函式至 rental 資料表可以告訴我們總共出租了多少部電影。有關更詳細的計數,我們需要使用 GROUP BY 子句。例如,我們可以透過根據 rental_date 分組來按天細分計數。我們還必須指定 return_date 不能為 NULL,以便我們不計算已租借但尚未歸還的電影。

num_of_films_rented (66K)

在本例中,不需要 ORDER BY,因為結果是以分組欄(即租賃日期)自動排序的。

案例 3:客戶每月租借的電影數量

在幾個相對簡單的例子之後,是時候提高難度了。GROUP BY 子句可以分組多個欄位,以取得更細密的表。例如,此査詢統計每個客戶、每月和每年的電影租借數量:

num_of_films_rented_by_customer_per_month (175K)

在本例中,我們使用 ORDER BY,以客戶的姓氏(last_name)而不是 customer_id 排序結果。在顯示月份名稱時,也對月份進行了類似的操作,但會根據月份編號分組和排序。

總結

在今天的文章中,我們學習了如何使用 Navicat Premium 查詢 Sakila 範例資料庫來根據不同的準則分組計數。正如我們今天在這裡看到的,將 COUNT() 函式與 GROUP BY 一起使用有助於根據不同的分組來細分計數。實際上,如果不將 COUNT() 與 GROUP BY 結合,就很難獲得相同的資料!

如果你對 Navicat Premium 感興趣,可以免費試用 14 天!



Rob Gravelle 居住於加拿大渥太華,是一名有 20 多年經驗的 IT 專家。過住,Rob 曾為情報相關的組織(如加拿大邊境服務局和各種商業組織)建置系統。在業餘時間,Rob 是一名出色的吉他演奏家,並發行了幾張 CD

Navicat 文章
頻道記錄
分享
部落格封存檔