首页 > 解决方案 > SQL 使用 CASE 创建新列

问题描述

我正在尝试使用案例语句根据“precipitation_type”中的值将“数量”列拆分为两个新列(总降雨量和降雪量之和),以查找一个城市一年的总雨量和降雪量。

select city
  ,(CASE precipitation_type WHEN 'rain' THEN total ELSE 0 END) AS "rainfall"
  ,(CASE precipitation_type WHEN 'snow' THEN total ELSE 0 END) AS "snowfall"
from 
  (select city, precipitation_type, sum(amount) as total
  from precipitation
  group by city, precipitation_type) a
group by city, a.precipitation_type, a.total
order by city asc;

我当前的输出如下所示:

Albany      0.00    48.51
Baltimore   0.00    0.00
Baltimore   0.00    27.11
Boston      0.00    0.00
Boston      41.12   0.00
Boston      0.00    32.28

我希望每个城市的降雨和降雪总量(总和)都在同一记录中。前任:

Albany       38.54   48.51
Baltimore    40.97   27.11
Boston       41.12   32.28

标签: sqlcase

解决方案


一个简单的条件聚合应该返回您的预期输出。尽管您没有提到您的 DBMS,但下面的脚本应该适合您-

SELECT city, 
SUM(CASE precipitation_type WHEN 'rain' THEN amount ELSE 0 END) AS "rainfall",
SUM(CASE precipitation_type WHEN 'snow' THEN amount ELSE 0 END) AS "snowfall"
FROM precipitation
GROUP BY city

推荐阅读