我有一个用户列表在我的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()。 那么,怎样才能得到同样的结果?
所以,让我们假设你有一些表至少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
下面是最终的解决方案:
SELECT
LEFT(name, 1) AS first_letter,
COUNT(*) AS total
FROM users
GROUP BY first_letter
资源