【PostgreSQL】行变列、非空(CASE WHEN、COALESCE)语句总结
生活随笔
收集整理的這篇文章主要介紹了
【PostgreSQL】行变列、非空(CASE WHEN、COALESCE)语句总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 源表結構:
| order_id | class | count |
|---|---|---|
| 111101100002 | 3 | 0 |
| 111101100012 | 1 | 3 |
| 11110112002 | 1 | 2 |
| 111101100202 | 2 | 0 |
2. 目標表結構:
根據order_id分組,根據不同的class進行統計
| order_id | count_1 | count_2 | count_3 | count_4 | count_5 | count_6 | count_7 | count_8 | count_9 | count_10 | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 111101100002 | 3 | 0 | 0 | 3 | 0 | 0 | 3 | 0 | 0 | 3 | 0 | 0 | 3 | 0 |
3. sql語句如下:
(1)分組統計,
(2)使用 COALESCE 返回第一個不為null的值,如果值為null,返回0
select order_id,
sum(COALESCE(cass class when 1 then count END,0)) as count_1,
sum(COALESCE(cass class when 2 then count END,0)) as count_2,
sum(COALESCE(cass class when 3 then count END,0)) as count_3,
sum(COALESCE(cass class when 4 then count END,0)) as count_4,
sum(COALESCE(cass class when 5 then count END,0)) as count_5,
sum(COALESCE(cass class when 6 then count END,0)) as count_6,
sum(COALESCE(cass class when 7 then count END,0)) as count_7,
sum(COALESCE(cass class when 8 then count END,0)) as count_8,
sum(COALESCE(cass class when 9 then count END,0)) as count_9,
sum(COALESCE(cass class when 10 then count END,0)) as count_10
from test_table group by order_id;
4. IF ELSE不太好用,可以用CASE WHEN THEN ELSE代替
比如 active_hour int 值分別為0~23
但是想要得到倆位的HH的小時值,需要把 0~9 轉換為 00 ~ 09
select active_hour,case when active_hour > 9 then ''||active_hour else '0'||active_hour from t_active;
總結
以上是生活随笔為你收集整理的【PostgreSQL】行变列、非空(CASE WHEN、COALESCE)语句总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Http接口请求Long类型数据Json
- 下一篇: csdn获取自己所有博客的地址,包含分页