mysql选择第一个字母字符的发生次数之和
嗨,我需要做的是创建一个select语句,它输出表中某个字段中第一个字符的总和,这样输出看起来就像mysql选择第一个字母字符的发生次数之和,mysql,Mysql,嗨,我需要做的是创建一个select语句,它输出表中某个字段中第一个字符的总和,这样输出看起来就像 A,12 B,0 C,20 D,14 E,0 ect... 该表称为contacts,在上面的表中,出现了12次姓名以字母A开头的人,出现了0次字母B 我希望我已经正确地解释了这一点试试这个: select substr(name, 1,1), count(*) from contacts group by substr(name, 1,1) 你可以随心所欲 select left(UPPE
A,12
B,0
C,20
D,14
E,0
ect...
该表称为contacts,在上面的表中,出现了12次姓名以字母A开头的人,出现了0次字母B
我希望我已经正确地解释了这一点试试这个:
select substr(name, 1,1), count(*) from contacts group by substr(name, 1,1)
你可以随心所欲
select
left(UPPER(firstname),1) as initial ,
count(*) as tot from users
group by initial ;
当您想要显示列表中不存在的字符时,您可能还需要一个查找表,然后与查找表联接。查找表将只包含字母表
select
a.alpha,
coalesce(b.tot,0) as total
from alphabets a
left join
(
select
left(UPPER(firstname),1) as initial ,
count(*) as tot from users
group by initial
)b
on b.initial = a.alpha
;
或
希望这会有所帮助
SELECT LEFT(firstname,1) as character, COUNT(1) as totalCount
FROM contacts
GROUP BY initial ORDER BY firstname;
为了让结果显示丢失的字母,您需要手动生成所有字母,例如使用子查询
SELECT a.Letter,
COUNT(u.Name) AS TotalCount
FROM
(
SELECT 'A' Letter UNION ALL
SELECT 'B' Letter UNION ALL
SELECT 'C' Letter UNION ALL
-- until Z
SELECT 'Z' Letter
) AS a
LEFT JOIN userList u
ON a.Letter = LEFT(u.Name, 1) -- <== column name
GROUP BY a.Letter
ORDER BY a.Letter
艰难的道路也同样如此
SELECT
'A' as letter ,
count(*) as total FROM totalCount
WHERE left(UPPER(firstname),1)='A'
UNION
SELECT
'B' as letter ,
count(*) as total FROM totalCount
WHERE left(UPPER(firstname),1)='B'
.....
UNION
SELECT
'Z' as letter ,
count(*) as total FROM totalCount
WHERE left(UPPER(firstname),1)='Z'
创建另一个表
table_letter
id letter
1 A
2 B
3 C
...
26 Z
SELECT a.letter, COUNT(b.name) as total
FROM table_letter a
LEFT JOIN contacts b
ON a.letter = left(UPPER(b.name),1)
GROUP BY a.letter
那么字母表中计数为零的字母呢,如我在字母B的示例中所示,我也需要得到这些字母吗?谢谢,但是我如何将where子句添加到userlist中,但仍然保持零字母,我尝试添加where u.verified=1和B DISAPERIALES您应该将其添加到on子句中。例如,字母=LEFTu.Name,1和u.verified=1
table_letter
id letter
1 A
2 B
3 C
...
26 Z
SELECT a.letter, COUNT(b.name) as total
FROM table_letter a
LEFT JOIN contacts b
ON a.letter = left(UPPER(b.name),1)
GROUP BY a.letter