28. 下列何者為統計 orders 表中每個客戶的訂單總數之正確 SQL 指令?
(A) SELECT customer_id, COUNT(*) FROM orders;
(B) SELECT customer_id FROM orders GROUP BY COUNT(*);
(C) SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id;
(D) SELECT COUNT(*) FROM orders GROUP BY customer_id;

答案:登入後查看
統計: A(2), B(6), C(8), D(5), E(0) #3447895

詳解 (共 1 筆)

#6443940

要統計 orders 表中每個客戶的訂單總數,我們需要使用 SQL 的 GROUP BY 子句和 COUNT(*) 聚合函數。

讓我們分析每個選項:

  • (A) SELECT customer_id, COUNT(*) FROM orders;

    • 這個指令會嘗試選取 customer_id 和所有訂單的總數。但在大多數 SQL 資料庫中,當你同時選取非聚合欄位 (customer_id) 和聚合函數 (COUNT(*)) 而沒有 GROUP BY 子句時,這會導致錯誤,或者只返回一行結果(例如,一個任意的 customer_id 和所有訂單的總數),這不符合「每個客戶」的需求。
  • (B) SELECT customer_id FROM orders GROUP BY COUNT(*);

    • 這個指令的 GROUP BY COUNT(*) 語法是錯誤的。你不能直接對聚合函數的結果進行分組。
  • (C) SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id;

    • 這個指令是正確的。它首先指定要選取 customer_id 和每個分組的計數 (COUNT(*))。然後,GROUP BY customer_id 會將 orders 表中的所有記錄按照 customer_id 進行分組。對於每個唯一的 customer_id 分組,COUNT(*) 會計算該組(即該客戶)擁有的訂單數量。這正是題目所要求的「統計每個客戶的訂單總數」。
  • (D) SELECT COUNT(*) FROM orders GROUP BY customer_id;

    • 這個指令雖然也使用了 GROUP BY customer_id 來計算每個客戶的訂單總數,但它只選取了 COUNT(*)。這意味著結果會是一系列數字,代表每個客戶的訂單總數,但不會顯示這些總數是屬於哪個 customer_id 的。例如,它可能只返回 5, 3, 7,而沒有 customer_id 來識別這些數字。這不符合完整統計「每個客戶」的需求。

因此,最正確且能完整呈現結果的 SQL 指令是 (C)。

0
0