Chapter 10. 函式 (五):特殊功能函式10.6 資料庫函式

10.6 資料庫函式


資料庫函式 (Database Function) 主要用於結構化的數據,可以使用資料庫函式快速的計算符合特定條件的基本統計資料。共包括 12 項,雖然每個資料庫函式計算的項目不同,但其輸入皆相同。

語法

DCOUNT / DCOUNTA / DMIN / DMAX / DSUM / DPRODUCT / DAVERAGE / DVAR / DVARP / DSTDEV / DSTDEVP / DGET (資料庫, 欄位, 條件)

輸入

  • 資料庫:資料庫的範圍 / 陣列,會自動將第一列視為欄位名稱。
  • 欄位:要計算統計資料或輸出的欄位,可以有以下兩種形式:
    • 字串:欄位名稱。
    • 數字:左邊數來第幾列。
  • 條件:要篩選的條件,可以是陣列或儲存格範圍。第一列是有條件的欄位名稱,第二列開始是各欄位的條件,以陣列形式表達即為:{欄位1, [欄位2...]; 欄位1條件1, [欄位2條件1...]; [欄位1條件2, 欄位2條件2...]}。
    另外條件的輸入方式與 SUMIF / COUNTIF 等函式相似,如下:
    • 檢查數字:條件可以是單一數字或包含運算子的字串,例如 100、">=100"、"<=2023/1/1" 等。
    • 檢查文字:可使用第 6.6 節介紹到的萬用字元 (?/*)。
    • 無限制:可直接輸入空值 ("") 即可。

輸出

資料庫中「符合任一列所有條件」的資料的統計結果。例如 =DCOUNTA(資料,"學號",{"國文分數","數學分數";">=80","";">=60",">=60"}) 會計算「國文分數 80 分以上」 或「國文與數學分數都 60 分以上」的學號數。

輸出的格式都會預設為自動,因此輸出是字串或日期則要自行更改 (DGET 才會有此類輸出),各函式分別統計以下結果:

  • DCOUNT / DCOUNTA:計算資料筆數,同 COUNT / COUNTA。
  • DMIN / DMAX:計算最大值 / 最小值,同 MIN / MAX。
  • DSUM / DPRODUCT / DAVERAGE:計算加總 / 相乘總和 / 平均,同 SUM / PRODUCT / AVERAGE。
  • DVAR / DVARP / DSTDEV / DSTDEVP:計算變異數 / 標準差,同 VAR / VARP / STDEV / STDEVP。
  • DGET:輸出符合條件的值,類似支援多條件的 VLOOKUP,但輸出僅限一筆,若無符合條件或有超過一筆符合條件的項目,會輸出 #NUM!。

以下使用第 1 章的交易記錄檔並搭配七個範例說明函式中的條件設定,為了方便已將交易記錄檔整張工作表 (A:K) 命名為「交易記錄」:


  1. 店號 105 的總金額

    公式

    =DSUM(交易記錄,"貨品總金額",{"店號";105})

    解說

    • 計算 "貨品總金額" 的加總,可使用 DSUM。
    • 已知貨品總金額在 交易記錄 的第 11 欄,因此也可使用 =DSUM(交易記錄,11,{"店號";105})。
  2. 店號 105 及 108 的總金額

    公式

    =DSUM(交易記錄,"貨品總金額",{"店號";105;108})

    解說

    使用「或」的條件要分成兩列,因此使用 {"店號";105;108}。

  3. 店號 105 大分類名稱為 410 的商品的總金額

    公式

    =DSUM(交易記錄,"貨品總金額",{"店號","大分類名稱";105,410})

    解說

    使用「和」的條件要分成兩欄,因此使用 {"店號","大分類名稱";105,410}。

  4. 貨名有「台灣」的商品的交易總筆數

    公式

    =DCOUNTA(交易記錄,"貨名",{"貨名";"*台灣*"})

    解說

    • 計算交易總筆數可使用 COUNTA,欄位 放入隨便一欄都可以。
    • "*台灣*" 在條件中使用萬用字元可撈出所有包含台灣的貨名。
  5. 2022/11/1~2022/11/30 的總金額

    公式

    =DSUM(交易記錄,"貨品總金額",{"交易日期","交易日期";">=2022/11/1","<=2022/11/30"})

    解說

    和 SUMIFS 一樣要將起始與結束日期視為兩個條件。

  6. 大分類名稱為 410,或是大分類名稱為 411 且貨名提及「奶粉」的消費總額

    公式

    =DSUM(交易記錄,"貨品總金額",{"大分類名稱","貨名";410,"";411,"*奶粉*"})

    解說

    此範例有兩個條件,但第一個條件並不用進一步篩選貨名,因此在貨名的條件直接輸入空值 ("")。

  7. (1) 清境礦泉水-1410cc (2) 花蓮煙台大白菜的交易日期

    公式

    (1) =DGET(交易記錄,"交易日期",{"貨名";"清境礦泉水-1410cc"})

    (2) =DGET(交易記錄,"交易日期",{"貨名";"花蓮煙台大白菜"})

    解說

    (1) 會輸出 44821 (可將格式轉成日期 2022/9/17),但 (2) 會輸出 #NUM!,因為有多筆 "花蓮煙台大白菜" 項目。


除了使用陣列的方式在公式中輸入條件外,也可以使用儲存格作為 條件,如下圖所示。使用儲存格作為條件後,可以搭配資料驗證製作下拉式選單,便能讓檔案的使用者用更簡單的方式查詢想要的資料。