2012-05-15 159 views
2

從一個mysql表中分組一些元素後,我有一個小問題, 我有一個訂單表..其中每個訂單有幾個按代碼分組的行(命名爲codcomanda)。 ..我必須做一個查詢,計算每個客戶的訂單數量,並只列出訂單的名稱和數量。MySQL GROUP BY和COUNT

這就是我想出了(這可能是愚蠢的......我不是一個親程序員)

SELECT a.nume, a.tel, (
    SELECT COUNT(*) AS `count` 
     FROM (
     SELECT id AS `lwtemp` 
      FROM lw_comenzi_confirmate AS yt 
     WHERE status=1 AND yt.tel LIKE **a.tel** 
     GROUP BY yt.codcomanda 
    ) AS b 
) AS numar_comenzi 
    FROM lw_comenzi_confirmate AS a 
WHERE status=1 
GROUP BY tel; 

nume = NAME
電話=電話(這是因爲客戶端的獨特標識符有沒有登錄系統)

上述查詢的問題是,我不知道如何匹配a.tel與第一個選擇所在的那個。如果我用它在數據庫中的數字替換它...

任何人都可以幫助我一個如何引用該var? 或者另一個解決方案如何完成這項工作?

如果需要更多信息我會盡快提供。

+0

我發現這個工作,但它需要17秒,以產生...'SELECT a.nume,a.tel,( SELECT COUNT(DISTINCT codcomanda) FROM lw_comenzi_confirmate WHERE STATUS = 1 及電話LIKE一個.tel )AS numar_comenzi FROM lw_comenzi_confirmate AS a WHERE STATUS = 1 GROUP BY tel ORDER BY numar_comenzi DESC' –

回答

1

請糾正我,如果我錯了,我在你的方案的理解:

  • lw_comenzi_confirmate包含nume和客戶的tel;
  • lw_comenzi_confirmate包含訂單詳情(同一張表);
  • 一個訂單可以在lw_comenzi_confirmate表中有幾個條目,訂單由codcomanda字段區分。

首先,我高度推薦閱讀Normalisation和修復您的數據庫設計。

下面應該爲你做的工作:

SELECT nume, tel, count(DISTINCT codcomanda) AS cnt 
    FROM lw_comenzi_confirmate 
WHERE status = 1 
GROUP BY nume, tel 
ORDER BY nume, tel; 

您可以SQL Fiddle測試此查詢。