关于用户表中列出同姓用户数量的sql语句

2016-10-22 14:38:24 / 17206 / 生活琐事

大半月没有写点什么了,也不能让它荒草丛生。


今天群里的冰封问了大家一个问题,
 一个数据库,有个user表,有个字段是姓名,我要找出各个姓开头有多少人(都是单字姓) ,sql怎么写?
我一开始的做法无非就是把查出的名字换成首字母然后去查找,后来发现想错了,因为姓也可能是同音字,字母这个判断并不行,
如果是根据名字的首字母去排序的话,倒是简单。
SELECT * FROM 表名 ORDER BY ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(列名 USING gbk),1)),16,10),
0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,
0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P',
'Q','R','S','T','W','X','Y','Z') ASC

如果要实现一开始的那个问题,sql语句可以这么写(这是别人给出来的)


select left(列名,1),count(1) as 数量 from 表 group by left(列名,1)


LEFT()和  RIGHT() 这两个函数
其实这一句sql很好理解。
返回某个被请求部分的左右侧部分
这里就把要查询的字段返回第一个部分,然后对结果集进行分组。
就实现了冰封一开始提出的那个问题,不过这只能针对单字母的姓处理,中国姓氏不少都是复姓的。
gravatar头像