Mysql COUNT,GROUP BY和ORDER BY

时间:2011-09-26 11:50:31

标签: mysql count group-by sql-order-by substr

这听起来很简单,但我无法理解。

我有一张表ordersidusernametelephone_number)。

我想通过比较telephone_number中的最后8个数字来获得来自一个用户的订单数量。

我尝试使用SUBSTR(telephone_number, -8),我进行了大量搜索和实验,但仍然无法让它发挥作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

未测试:

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

这个想法:

  1. 选择COUNT(*)(即每个GROUP中的行数)和Orders*
  2. 中的所有字段
  3. GROUP位于telephone_number 1 的最后八位数字
  4. 可选择ORDERGROUP降序行数。

  5. 1) 如果您打算经常进行此类查询,则可能需要在电话号码的最后部分使用某种索引。如何最好地实现这取决于存储在该字段中的具体值。

答案 1 :(得分:1)

//内存密集型。

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

OR

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

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

答案 2 :(得分:0)

您可以使用以下查询从列值中获取最后8个字符。

选择正确(rtrim(First_Name),8)FROM [ated]。[dbo]。[Employee]