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

SQL作业求助:为客户代表统计查询添加邮政编码筛选条件

搞定这个SQL问题很简单!

你已经写对了核心的分组统计逻辑,只需要在筛选条件里加上邮政编码的判断就行啦~不过这里要注意邮政编码字段的类型,分两种常见情况给你说明:

情况1:邮政编码是字符串类型(比如VARCHAR)

如果你的邮编字段存在字符串类型里,直接用LIKE匹配开头字符就可以:

SELECT cust_rep, count(cust_nbr) as "CustomerCount" 
FROM customer 
WHERE cust_rep < 100 
  AND (zip_code LIKE '0%' OR zip_code LIKE '9%') -- 新增邮编筛选条件
GROUP BY cust_rep 
ORDER BY cust_rep;

用括号把两个LIKE条件括起来,确保逻辑优先级正确——意思是同时满足「客户ID小于100」并且「邮编以0或9开头」的客户才会被统计。

情况2:邮政编码是数字类型(比如INT)

如果邮编存在数字字段里,有两种处理方式:

方法A:转成字符串再匹配

SELECT cust_rep, count(cust_nbr) as "CustomerCount" 
FROM customer 
WHERE cust_rep < 100 
  AND (CAST(zip_code AS VARCHAR) LIKE '0%' OR CAST(zip_code AS VARCHAR) LIKE '9%')
GROUP BY cust_rep 
ORDER BY cust_rep;

用CAST函数把数字转成字符串,就能复用上面的LIKE逻辑了。

方法B:用数学运算提取第一位数字(适合固定位数的邮编,比如5位)

SELECT cust_rep, count(cust_nbr) as "CustomerCount" 
FROM customer 
WHERE cust_rep < 100 
  AND FLOOR(zip_code / 10000) IN (0, 9)
GROUP BY cust_rep 
ORDER BY cust_rep;

比如5位邮编90210,除以10000后取整得到9,01234取整得到0,这样就能判断第一位是不是0或9了。

额外补充:如果要显示所有ID<100的代表(哪怕没有符合条件的客户)

如果你的需求是不管代表有没有服务符合邮编条件的客户,都要列出他的ID并显示0,那可以用子查询加LEFT JOIN:

SELECT 
  cr.cust_rep, 
  COUNT(CASE WHEN c.zip_code LIKE '0%' OR c.zip_code LIKE '9%' THEN c.cust_nbr END) AS "CustomerCount"
FROM (SELECT DISTINCT cust_rep FROM customer WHERE cust_rep <100) cr
LEFT JOIN customer c ON cr.cust_rep = c.cust_rep
GROUP BY cr.cust_rep
ORDER BY cr.cust_rep;

内容的提问来源于stack exchange,提问作者Kendall O'Connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:54