sql - 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
解决方案
一个简单的条件聚合应该返回您的预期输出。尽管您没有提到您的 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
推荐阅读
- python - Python Quora 脚本
- javascript - 为什么我的 reactContext 变量仍然为空?
- erlang - Erlang 引用是否被垃圾收集?
- c - 打印函数变量时打印输出不同
- flutter - 在云 Firestore 中添加文档时出错:未处理的异常:无效的参数:“用户”的实例
- database - 为什么这个代码 $results = \Db::select('select * from engegraph_forms_membros where id = ?', [1]); 不工作?
- docker - 在只读卷内挂载读写卷
- discord.py - (Discord.py) 消息机器人通过 dm,然后发送到频道
- r - 对每 24 小时数据周期应用缩放功能
- python - IndexError:方程清理函数上的字符串索引超出范围