資料庫中生成資料透視表的SQL的效率比較

2021-04-06 20:25:36 字數 1154 閱讀 8944

(1)以下sql語句執行效率較低,大約在90分鐘執行完畢

select distinct a.pulse_id,a.field_id,

(select  sum(kwh_val) from his_pbs_20041201 where pulse_id = a.pulse_id and to_number(to_char(unix_to_oracle(occur_time),'hh24'))=0 ) as v0,

(select  sum(raw_val) from his_pbs_20041201 where pulse_id = a.pulse_id and to_number(to_char(unix_to_oracle(occur_time),'hh24'))=0 ) as r0,

(select  sum(status)  from his_pbs_20041201 where pulse_id = a.pulse_id and to_number(to_char(unix_to_oracle(occur_time),'hh24'))=0 ) as st0,

from his_pbs_20041201 a

where pulse_id = 164000029;

(2)通過在sql中加入case語句,可以極大提高sql的執行速度

select distinct a.pulse_id,a.field_id,

sum(case to_number(to_char(unix_to_oracle(occur_time),'hh24')) when 0  then kwh_val  else 0 end) as v0,

sum(case to_number(to_char(unix_to_oracle(occur_time),'hh24')) when 0  then raw_val  else 0 end) as r0,

sum(case to_number(to_char(unix_to_oracle(occur_time),'hh24')) when 0  then status   else 0 end) as st0,

from his_pbs_20041201 a

group by a.pulse_id,a.field_id;

以上兩種取得資料透視表的方法在oracle與sql server中均適用。第一種方法要耗時90分鐘,第二種方法只需3分鐘即可。

生成資料庫字典SQL

select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,欄位序號 a.colorder,欄位名 a.name,標識 case when ...

sessionFactory 生成資料庫表

tomcat 啟動時會讀取web.xml檔案 根據其中的配置 contextconfiglocation org.springframework.web.context.contextloaderlistener 1.首先讀取.中的配置資訊,建立contextloaderlistener 的例項物件...

解決逆向生成資料庫表的模型

場景 有個非本專案 python專案 的資料庫,現需要直連這個資料庫獲取一些資料,後端是通過orm的方式來開發的,並非直接寫sql語句 也不會符合本需求 用orm就需要建對應表的models python manage.py inspectdb models.pydjango提供了一個 inspec...

使用SQL檔案自動生成資料庫文件

來新公司實習剛過一週時間,一開始都在嘗試看專案 資料庫表結構等,因為沒有完備的文件,所以看起來還是相當困難的,也是因為看資料庫時,每次需要一張表一張表的翻,非常麻煩,就想著寫個指令碼通過sql檔案生成資料庫文件,而且當前比較流行markdown,所以就為sql檔案生成了md格式的資料庫文件,於是就有...

mysql 表分割槽指令碼 自動生成資料庫表分割槽指令碼

按時間 日期 動態生成sql server資料庫分割槽指令碼,分好區後,手動和表建立關聯即可 生成分割槽指令碼 declare databasename nvarchar 50 資料庫名稱 declare tablename nvarchar 50 表名稱 declare columnname nv...