2011-09-26 231 views
1

這聽起來很簡單,但我無法弄清楚。Mysql COUNT,GROUP BY和ORDER BY

我有一個表ordersidusernametelephone_number)。

我想獲得通過比較telephone_number中的最後8個號碼來自一位用戶的訂單數量。

我試過使用SUBSTR(telephone_number, -8),我已經搜索了很多實驗,但仍然無法實現。

有什麼建議嗎?

回答

3

未經測試:

SELECT 
    COUNT(*) AS cnt, 
    * 
FROM 
    Orders 
GROUP BY 
    SUBSTR(telephone_number, -8) 
ORDER BY 
    cnt DESC 

的想法:

  1. 選擇COUNT(*)(即在每個GROUP行荷蘭國際集團的數),最後從Orders*
  2. GROUP和所有領域telephone_number
  3. 可選,ORDERGROUP中的行數遞減。

1)如果您打算經常做這種類型的查詢,對電話號碼的最後一部分某種指數的可能是可取的。如何最好地實現這一點取決於現場存儲的具體數值。

+0

謝謝...它工作的完美! – vstruhar

1

//內存密集。

SELECT COUNT(*) FROM `orders` WHERE REGEXP `telephone_number` = '(.*?)12345678' 

OR

//相同,但更好和更快。

SELECT COUNT(*) FROM `orders` WHERE `telephone_number` LIKE '%12345678' 
0

您可以使用以下查詢從列值中獲取最後8個字符。

選擇權(RTRIM(將First_Name),8)[ated] [DBO]。[僱員]