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

使用SUM(CASE WHEN)查询伦敦犯罪数据返回异常值的技术求助

问题排查与解决方案

核心问题:字符串精确匹配失败

你遇到的数值不符(比如Brent行政区的Criminal Damage to Motor Vehicle显示0),大概率是因为CASE语句里的字符串和minor_category字段的实际值不精确匹配——可能存在大小写差异、额外空格、拼写细微偏差(比如英式/美式拼写)。

第一步:验证目标分类的实际名称

先运行以下查询,确认Brent行政区实际存在的minor_category值及对应总数:

SELECT DISTINCT minor_category, SUM(value) AS total
FROM `bigquery-public-data.london_crime.crime_by_lsoa`
WHERE borough = 'Brent'
GROUP BY minor_category
ORDER BY total DESC;

执行后你能看到该行政区所有犯罪类型的精确名称,对比你写的'Criminal Damage to Motor Vehicle'是否一致。

第二步:修正原查询

方案1:统一大小写匹配

如果是大小写问题,用LOWER()函数统一转换后再匹配,避免大小写敏感问题:

SELECT
  borough,
  SUM(CASE WHEN LOWER(minor_category) = 'rape' THEN value ELSE 0 END) AS Rape_Total,
  SUM(CASE WHEN LOWER(minor_category) = 'criminal damage to motor vehicle' THEN value ELSE 0 END) AS Criminal_Damage_Total
FROM
  `bigquery-public-data.london_crime.crime_by_lsoa`
GROUP BY
  borough;

方案2:使用精确分类名替换

直接用第一步查询到的精确minor_category值替换CASE语句里的字符串,确保完全匹配。

更简洁的行转列方案:使用PIVOT语法

BigQuery支持PIVOT语法,可以更直观地实现行转列,同时减少字符串匹配出错的概率:

SELECT *
FROM `bigquery-public-data.london_crime.crime_by_lsoa`
PIVOT (
  SUM(value) AS total
  FOR minor_category IN ('Rape', 'Criminal Damage to Motor Vehicle') -- 替换为第一步查到的精确名称
)
ORDER BY borough;

内容的提问来源于stack exchange,提问作者Barney De Jongh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:17:41