2011-09-26 184 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]。[雇员]