这听起来很简单,但我无法理解。
我有一张表orders
(id
,username
,telephone_number
)。
我想通过比较telephone_number
中的最后8个数字来获得来自一个用户的订单数量。
我尝试使用SUBSTR(telephone_number, -8)
,我进行了大量搜索和实验,但仍然无法让它发挥作用。
有什么建议吗?
答案 0 :(得分:3)
未测试:
SELECT
COUNT(*) AS cnt,
*
FROM
Orders
GROUP BY
SUBSTR(telephone_number, -8)
ORDER BY
cnt DESC
这个想法:
COUNT(*)
(即每个GROUP
中的行数)和Orders
(*
)GROUP
位于telephone_number
1 的最后八位数字ORDER
按GROUP
降序行数。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]