@4iloveg
Full-Stack HTML Developer

Как в большой базе можно получить такую статистику?

Есть база с 150 миллионов пользователей. В таблице users 4 поля: id, пароль, возраст и поле в котором содержится имя и фамилия через пробел. Как должен выглядеть sql запрос, что бы получить и вывести список существующих в базе имен и количество раз которые они встречаются?
Александр: 347873
Иван: 23773
...
На php не проблема сделать вывод но как должен выглядеть sql запрос для такого количества данных слабо представляю. Если имя получать регуляркой то это сильно нагрузит базу? При том что в базу еще периодически поступают запросы на получение/ изменение данных.
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Запрос от количества данных не зависит.
Регулярка не нужна, есть SUBSTRING_INDEX

Если запрос одноразовый, то просто запросить нужные данные.
select SUBSTRING_INDEX(username, ' ' , 1), count(1) from table group by SUBSTRING_INDEX(username, ' ' , 1)
Индекс на поле будет очень полезен

Если надо выполнять регулярно, то поменять структуру таблицы, вынеся имя в отдельное поле.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Byte255
Пишу на PHP за еду
Первым делом надо бы нормализовать базу, разместить имя и фамилию в отдельные поля (это первая нормальная форма баз данных).

А далее примерно так:
SELECT name, COUNT(id) AS cnt FROM table GROUP BY (name)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы