Mysql COUNT, GROUP BY и ЗАКАЗАТЬ - PullRequest
       30

Mysql COUNT, GROUP BY и ЗАКАЗАТЬ

1 голос
/ 26 сентября 2011

Звучит довольно просто, но я просто не могу понять.

У меня есть стол orders (id, username, telephone_number).

Я хочу получить количество заказов от одного пользователя, сравнив последние 8 чисел в telephone_number.

Я пытался использовать SUBSTR(telephone_number, -8), я много искал и экспериментировал, ноЯ все еще не могу заставить его работать.

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 26 сентября 2011

Не проверено:

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

Идея:

  1. Выберите COUNT(*) (т. Е. Количество строк в каждом GROUP ing) и все поля из Orders(*)
  2. GROUP по последним восьми цифрам telephone_number 1
  3. По выбору ORDER по количеству строк в GROUP ingпо убыванию.

1) Если вы планируете делать этот тип запроса часто, какой-то индекс в последней части телефонаномер может быть желательным.Как это лучше всего реализовать, зависит от конкретных значений, хранящихся в поле.

1 голос
/ 26 сентября 2011

// Объем памяти.

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

ИЛИ

// То же самое, но лучше и быстрее.

SELECT COUNT(*) FROM `orders` WHERE `telephone_number` LIKE '%12345678'
0 голосов
/ 26 сентября 2011

Вы можете использовать приведенный ниже запрос для получения последних 8 символов из значений столбца.

выберите право (rtrim (First_Name), 8) FROM [ated]. [Dbo]. [Employee]

...