postgresql實際使用經驗

2021-10-21 14:43:27 字數 2799 閱讀 2242

此處需要儲存一次select的結果集用來進行第二次連線。

with temp1 as

(select

*from t_energy_type where company_id =

991897881281560576

and del_status =1)

, temp2 as

(select b.

value

, a.energy_type_id

from t_energy_type a

left

join t_unit_consumption b on b.energy_type_id = a.energy_type_id and b.del_status =

1left

join t_system_group c on c.group_id = b.group_id and c.del_status =

1where a.del_status =

1and a.company_id =

991897881281560576

and b.

type

='m'

--時間型別

and c.

type=1

and to_date(to_char(record_date,

'yyyy-mm'),

'yyyy-mm')=

to_date(

'2021-02-28'

,'yyyy-mm'))

select t1.name, t1.english_name, t2.

value

, t1.energy_type_id

from temp1 t1

left

join temp2 t2 on t2.energy_type_id = t1.energy_type_id;

可以用 with temp1 as (第一次查詢),temp as (第二次查詢) select * from temp1 left join temp 2 on **** = ***;

的語句把兩次結果進行再次關聯。

特定業務,比如計算環比 需要用兩個同樣語句的不同時間條件進行比較計算的情景,可以用臨時表儲存,再進行查詢結果。

select a.

value

, a.record_date as

"recorddate"

, f.english_name,

concat(f.name,

'(', f.unit,

')')

as name

from t_unit_consumption a

left

join t_system_group b on b.group_id = a.group_id and b.del_status =

1left

join t_device c on c.device_id = b.device_id and c.del_status =

1left

join t_energy_relation d

on d.group_id = a.group_id and d.energy_type_id = a.energy_type_id and d.del_status =

1left

join t_energy_type f on f.energy_type_id = a.energy_type_id and f.del_status =

1where a.del_status =

1and a.

type

='m'

--按月 按日

and to_char(a.record_date,

'yyyy-mm-dd'

)>=

'2021-01-01'

--開始時間

and to_char(a.record_date,

'yyyy-mm-dd'

)<=

'2021-03-04'

--結束時間

and a.company_id =

991897881281560576

--公司id

and b.

type=3

and d.is_valid =

1and d.is_uc_statistics =

1and c.

type=2

--裝置型別

;

cast(

value

asdecimal(18

,2))

,//保留兩位小數點

case

when t2.

value!=0

then cast(

((t1.

value

- t2.

value

)/ t2.

value)as

decimal(18

,2))

else

null

endas ratio

例如對現在的時間進行修改

now

()::timestamp

+'-1 year'

now(

)::timestamp

+'-1 mouth'

now(

)::timestamp

+'-1 day'

Promise 實際使用

promise 實際使用 const p new promise resolve,reject then else const c res 1000 p.then res then r catch err 例項2 封裝 呼叫 ajax prefix entity1 action1 null,func...

mysql IFNULL實際使用

表 srm supplier srm sup company,srm company 關係 srm supplier 一對多 srm sup company,srm company 多對一 srm sup company 問題 取所有srm supplier資訊,其中companyname存在srm...

Linux mount實際使用

檢視所有檔案系統 裝置 fdisk l 1.當要重新掛載乙個檔案系統時 裝置 可以直接 mount o remount,rw dev sdb9 檔案系統 mnt sdb9 目錄 也可以 umount mnt sdb9 fdisk l 作用是找到所有的檔案系統,如果用df或者mount命令不能看到沒有...