如何计算使用generate_series(),相当于在MySQL的项目?(How to count

2019-10-24 01:52发布

我有一个用户列表在我的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()。 那么,怎样才能得到同样的结果?

Answer 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



Answer 2:

下面是最终的解决方案:

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

资源



文章来源: How to count items using generate_series() equivalent in MySQL?