如何使用MySQL中的generate_series()等效计算项目?

时间:2015-07-21 17:07:01

标签: mysql sql postgresql count alphabetical

我的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

(感谢this answer

以下是PHPPGAdmin中的结果:

enter image description here

现在,由于我迁移到MySQL,我需要使用相同的查询,但似乎MySQL不使用generate_series()。那么,如何得到相同的结果?

2 个答案:

答案 0 :(得分:1)

所以我们假设你有一些表,其中至少有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小提琴:http://sqlfiddle.com/#!9/6efac/8

答案 1 :(得分:0)

以下是最终解决方案:

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

Source