You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL统计customer表中姓氏以各字母开头的记录数量

姓氏首字母统计高效实现方案

你用分组聚合的方式一次查询就能拿到所有首字母的统计结果,不需要逐个写字母的查询条件,以下是适配你用的SQL Server环境的方案:

基础方案(仅返回有记录的首字母)

直接取姓氏首字母分组统计即可,仅需扫描一次表,性能远高于多次单字母查询:

-- 直接返回首字母和对应数量两列
SELECT 
    UPPER(LEFT(last_name, 1)) AS 首字母,
    COUNT(Id) AS 记录数量
FROM [dbo].[customer]
WHERE last_name IS NOT NULL AND last_name != ''
GROUP BY UPPER(LEFT(last_name, 1))
ORDER BY 首字母

如果需要直接输出你要的字母,数量格式的单行结果,调整查询即可:

-- 直接输出符合要求的逗号拼接格式
SELECT 
    CONCAT(UPPER(LEFT(last_name, 1)), ',', COUNT(Id)) AS 统计结果
FROM [dbo].[customer]
WHERE last_name IS NOT NULL AND last_name != ''
GROUP BY UPPER(LEFT(last_name, 1))
ORDER BY UPPER(LEFT(last_name, 1))

扩展方案(包含无记录的首字母,统计为0)

如果需要A-Z所有字母都出结果,没有对应记录的数量显示为0,可以先生成26字母的临时列表再左关联业务表:

WITH 字母列表 AS (
    SELECT CHAR(ASCII('A') + number) AS 字母
    FROM master.dbo.spt_values
    WHERE type = 'P' AND number BETWEEN 0 AND 25
)
SELECT 
    CONCAT(l.字母, ',', ISNULL(COUNT(c.Id), 0)) AS 统计结果
FROM 字母列表 l
LEFT JOIN [dbo].[customer] c 
    ON UPPER(LEFT(c.last_name, 1)) = l.字母
    AND c.last_name IS NOT NULL AND c.last_name != ''
GROUP BY l.字母
ORDER BY l.字母

方案说明

  • 外层套UPPER()是为了统一大小写,避免首字母小写的记录被分到单独的分组
  • 过滤空值是为了避免空姓氏的无效统计,不需要可以删除WHERE条件里的对应判断

内容的提问来源于stack exchange,提问作者victor martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:48:05