Как подсчитать элементы, используя эквивалент generate_series() в MySQL?

у меня есть список пользователей в моей базе данных Postgresql, и я хочу подсчитать, сколько пользователей есть для каждой буквы.

Вот SQL-запрос:

select chr(chars.letter + ascii('A')) as letter,
       count(m.nome)
from generate_series(0, 25) as chars(letter)
left join merchant m on ascii(left(m.nome, 1)) = chars.letter + ascii('A')
group by letter
order by letter asc

(благодаря этому ответу)

Вот результат в PHPPGAdmin:

введите здесь описание изображения

Теперь, когда я перехожу на MySQL, мне нужно использовать тот же запрос, но кажется, что MySQL не использует generate_series(). Итак, как получить тот же результат?


person smartmouse    schedule 21.07.2015    source источник


Ответы (2)


Итак, давайте предположим, что у вас есть какая-то таблица, содержащая не менее 26 записей (возможно, information_schema.columns?).

Следующее будет генерировать все прописные буквы алфавита:

SET @c := 64;

SELECT CAST(CHAR(@c := @c + 1) AS CHAR(1)) AS letter
FROM table_with_at_least_26_rows
LIMIT 26
;

Чтобы вставить вышеуказанное в исходный запрос, поставьте SET @c := 64; перед запросом, а затем замените generate_series(0, 25) as chars(letter) на ( SELECT CAST ... LIMIT 26 ) chars. Не забудьте включить круглые скобки, так как это превратит запрос в подзапрос.

SQL Fiddle запроса: http://sqlfiddle.com/#!9/6efac/8

person Mr. Llama    schedule 21.07.2015

Вот окончательное решение:

SELECT
   LEFT(name, 1) AS first_letter,
   COUNT(*) AS total
FROM users
GROUP BY first_letter

Источник

person smartmouse    schedule 22.07.2015