CASE表达式修正请求:需按指定CASE语句对SQL查询结果分组
修正后的SQL解决方案
问题核心
原CASE语句存在两个关键问题:
- 大小写匹配失效:多数数据库的
LIKE默认区分大小写,导致含大写关键词(如Cafe、SCHOOL)的商家名称无法被匹配,错误归为other。 - 未实现分组聚合:原SQL仅返回单条记录的分类,没有按分类完成分组汇总,不符合"分组"需求。
修正后的代码示例
1. 基础匹配修正(解决大小写问题)
统一转小写后匹配,同时调整条件顺序避免关键词覆盖:
SELECT business_name, CASE WHEN LOWER(business_name) LIKE '%school%' THEN 'School' WHEN LOWER(business_name) LIKE '%caf%' THEN 'Cafe' -- 优先匹配咖啡类,避免被餐厅关键词覆盖 WHEN LOWER(business_name) LIKE '%restaurant%' THEN 'Restaurant' ELSE 'Other' END AS business_classification FROM sf_restaurant_health_violations;
2. 分组统计(按分类汇总)
如果需要按分类统计商家数量,添加GROUP BY和聚合函数:
SELECT CASE WHEN LOWER(business_name) LIKE '%school%' THEN 'School' WHEN LOWER(business_name) LIKE '%caf%' THEN 'Cafe' WHEN LOWER(business_name) LIKE '%restaurant%' THEN 'Restaurant' ELSE 'Other' END AS business_classification, COUNT(DISTINCT business_name) AS business_count -- 统计不同商家的数量 FROM sf_restaurant_health_violations GROUP BY business_classification ORDER BY business_count DESC;
关键说明
LOWER(business_name)将名称统一转为小写,确保匹配不受大小写影响。- 条件顺序可按需调整:若存在同时含多个关键词的名称(如
Cafe Restaurant),会优先匹配排在前面的规则。 - 部分旧版本数据库不支持用别名分组,可将
GROUP BY后的字段替换为完整的CASE表达式。
内容的提问来源于stack exchange,提问作者Thedh
相关产品推荐
相关产品推荐

