SQL查询实现:筛选第二位为a的四字母姓氏 补全WHERE条件
问题解决实现
你需要补充的last_name筛选逻辑可以通过字符串函数或者LIKE通配符实现,同时注意你原有SQL里DISTINCT的位置写错了,正确写法如下:
写法1:用字符串函数明确判断
SELECT COUNT(DISTINCT actor_id) AS matched_total FROM actor WHERE LEFT(first_name, 1) = 'W' OR ( LENGTH(last_name) = 4 AND SUBSTR(last_name, 2, 1) = 'a' );
说明
- 第二个筛选条件要求两个规则同时满足,必须用
AND关联两个判断,并用括号包裹,避免和前面的OR产生逻辑优先级错误 LENGTH(last_name) = 4用来判断last_name字段值长度为4个字符SUBSTR(last_name, 2, 1)表示从last_name的第2位开始截取1个字符,判断其等于'a'即可满足「第二个字符为a」的要求- 原有写法里的
DISTINCT COUNT(*)是无效写法:DISTINCT需要写在聚合函数内部,指定去重依据,这里用actor表的主键actor_id作为去重字段即可统计不重复的记录总数,如果确认表中无完全重复的行,直接写COUNT(*)也可以得到正确结果。
写法2:用LIKE通配符简化实现
用SQL的LIKE通配符可以更简洁地实现last_name的筛选规则,不需要调用多个函数:
SELECT COUNT(*) AS matched_total FROM actor WHERE LEFT(first_name, 1) = 'W' OR last_name LIKE '_a__'
说明
LIKE语法里下划线_是通配符,匹配任意单个字符:
- 4个字符的长度刚好对应4个下划线占位
- 第二个位置写固定字符'a',就可以精准匹配「长度为4、第二位为a」的last_name值,和函数判断的效果完全一致。
内容的提问来源于stack exchange,提问作者Amir Monir
相关产品推荐
相关产品推荐

