Oracle中按特定条件统计数据:如何按姓名首字符统计人员数量
解决Oracle中按姓名首字符统计人数的问题
嘿,你的需求是按姓名首字母分组统计人数对吧?先看看你写的查询语句,这里有两个小问题:一是substr(name)没有指定截取长度,Oracle里substr如果只传第一个参数,会返回整个字符串;二是你的where子句逻辑不对,咱们要的是分组统计,不是过滤行。
我给你写个正确的查询语句,完全能满足你的需求:
SELECT SUBSTR(name, 1, 1) AS FIRST_CHAR, COUNT(id) AS NUMBER_OF_PERSONS FROM Person GROUP BY SUBSTR(name, 1, 1) ORDER BY FIRST_CHAR;
语句解释:
SUBSTR(name, 1, 1):从姓名的第1个字符开始截取1个长度,精准拿到首字符;COUNT(id):统计每个分组里的人员数量(用COUNT(*)也可以,效果一致);GROUP BY SUBSTR(name, 1, 1):按照首字符进行分组,这是实现分组统计的核心;ORDER BY FIRST_CHAR:让结果按首字母顺序排列,看起来更整洁直观。
补充优化:
如果你的姓名存在大小写混合的情况(比如既有Michael又有mike),可以用UPPER或者LOWER统一转换,避免大小写被当成不同分组:
SELECT UPPER(SUBSTR(name, 1, 1)) AS FIRST_CHAR, COUNT(id) AS NUMBER_OF_PERSONS FROM Person GROUP BY UPPER(SUBSTR(name, 1, 1)) ORDER BY FIRST_CHAR;
测试数据执行结果:
用你提供的Person表数据,第一个查询会返回:
| FIRST_CHAR | NUMBER_OF_PERSONS |
|---|---|
| E | 3 |
| G | 1 |
| M | 2 |
和你预期的结果完全对应,多显示的首字符列还能让你清晰知道每个数字对应的是哪个首字母~
内容的提问来源于stack exchange,提问作者Evan Setiawan
相关产品推荐
相关产品推荐

