【postgresl】PG資料庫sql特性簡單解析
--SQL高階特性 --with查詢,cte(common table expressions),with查詢在複雜查詢中定義一個輔助語句,這一特性常用於複雜查詢或地櫃查詢應用場景,例如 with t as (select generate_series(1,3)) select * from t; --上述語句中,定義了輔助語句t取數,之後在主查詢語句中查詢t,複雜語句例如 with regional_sales as (select region,sum(amount) as total_sales from orders group by region),to_regions as (select region from regional_sales where total_sales >(select sum(total_sales/10 from regional_sales)) select region,product,sum(quantity) as product_units,sum(amount) as product_sales from orders where region in (select region from top_regions) group by region,product; --遞迴查詢cte,recursive屬性可引用自己的輸出,例如 with recursive t (x) as ( select 1 union select x+1 from t where x <5) select sum(x) from t; id name fatherid 1 中國 0 2 遼寧 1 3 山東 1 4 瀋陽 2 5 大連 2 6 濟南 3 7 和平區 4 8 瀋河區 4 --查詢,例如id=7時,輸出中國遼寧瀋陽和平區 with recursive r as ( select * from test_area where id=7 union all select test_area.* from test_area,t where test_area.id=r.fatherid) select string_agg(name,'') from (select name from r order by id) n; --批量插入 insert into .. select .. insert into values(),(),() copy/copy() 命令 --returning 返回修改的資料,* 可替換成某列,insert/delete/update insert into test_r1(flag) values ('a') returning *; --upsert,insert ... on conflict update,用來解決插入過程中資料衝突問題,例如違反使用者自定義約束,例如批量插入,如有違反,事物回滾 insert into user_logins (user_name,login_cnt) values ('aaa',1),('bbb',1) on conflict(username) do update set login_cnt=user_logins.login_cnt+EXCLUDED.login_cnt,last_login_time=now(); --do update set 可替換為do nothing --資料抽樣,9.5之前通過order by random()方式,效能低下,9.5之後語句如下: select ... from table_name tablespample sampling_method (argument [,...]) [REPEATABLE (seed)] --sampling_method指抽樣方法,主要兩種,system和bernoulli,argument指抽樣百分比 --system方式,基於資料塊級別,隨機抽取 select * from test_sample tablesample system(0.01); --explain analyze ,表示實際執行sql,並顯示執行計劃和時間,planning time表示sql語句解析生成執行計劃的時間,execution time表示sql實際執行時間 --檢視錶佔用的資料塊數量 select relname,relpages from pg_class where relname='test_sample'; --ctid,隱藏列,表示邏輯資料塊編號,第二位表示邏輯塊上資料的邏輯編號 select ctid,* from test_sample tablesample system(0.01); --bernoulli 抽樣方式,隨機抽取表的行數,效能相對低於system方式,但隨機性更好 select * from test_sample tablesample bernoulli(0.01); ##聚合函式 --string_agg,主要將結果集下某個欄位所有行連線成字串,並指定delimiter分隔符分割,expression表示型別,主要是text string_agg(expression,delimiter) select string_agg(city,',') from city; --array_agg 返回陣列,同上類似 select country,array_agg(city) from city group by country; ##視窗函式 --avg() over(),第四列根據subject分組,取課程平均分, select subject,stu_name,score,avg(score) over(partition by subject)from score; --row_number(),對結果集分組後的資料標註行號 select row_number() over (partition by subject order by score desc),* from score; --rank() 表示當組內某行欄位相同時,行號重複且行號產生間隙(例如,1,1,3) select rank() over (partition by subject order by score),* from score; --demse_rank() 表示當組內某行欄位相同時,行號重複且行號不產生間隙(例如,1,1,2) select demse_rank() over (partition by subject order by score),* from score; --lag(),可以獲取行偏移offset那行某個欄位的資料 lag(value anyelement [,offset integer [, default anyelement ]]) --value 指定要返回記錄的欄位,offset指行偏移量,可以是正數或負數,預設1,default是指如果不存在offset用預設填充,預設值null select lag(id,1) over(),* from score; select lag(id,2,1000) over(),* from score; --first_value(),取結果集每一個分組第一行資料 select first_value(score) over(partition by subject order by score desc),* from score; --以上按照課程分組,並取每門課程最高分 --last_value(),最後一行資料 --nth_value(),每組指定行的資料 select nth_value(score,2) over(partition by subject),* from score; --視窗函式別名,多次使用,可以使用別名 select ... from .. window window_name as (window_definition),[,...] select avg(score) over(r),sum(score) over(r),* from score window r as (partition by subject);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2639020/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PG資料庫SQL最佳化小技巧資料庫SQL
- SQL Server資料庫的簡單實現方法SQLServer資料庫
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- 資料庫週刊18│4月資料庫排行;PG是最好的資料庫;TiDB 4.0新特性資料庫TiDB
- PG 資料庫 從阿里雲pg rds 同步資料。資料庫阿里
- pg_resetwal pg_resetxlog 重整 pg資料庫 wal 與pg_controldata 。 資料庫恢復。資料庫LDA
- 【PG效能】Postgresql效能相關(作業系統及資料庫簡單說明)SQL作業系統資料庫
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- 簡單解讀AISWare AIDB亞信資料庫產品特性AI資料庫
- PG資料庫初始化資料庫
- 關於SQL資料庫一些簡單的筆記SQL資料庫筆記
- 透過預熱來最佳化PG資料庫的SQL效能資料庫SQL
- PG 資料庫恢復實戰資料庫
- C++ 連線pg資料庫C++資料庫
- ASP資料庫簡單操作教程資料庫
- PG 資料庫遭遇 pg_clog file missing 故障.資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 小麥苗資料庫巡檢指令碼V7.0,支援Oracle、MySQL、SQL Server和PG資料庫資料庫指令碼OracleMySqlServer
- 資料庫菜鳥不可不看簡單SQL語句小結資料庫SQL
- SQL Server 記憶體資料庫原理解析SQLServer記憶體資料庫
- 【PG管理】postgresql資料庫管理相關SQL資料庫
- 基於PMEM的PG資料庫Memhive資料庫Hive
- PG資料庫為什麼要用autovacuum資料庫
- PG資料庫IO最佳化技巧資料庫
- ASP.NET MVC – SQL 資料庫簡介ASP.NETMVCSQL資料庫
- HTML5 Web SQL 資料庫簡介HTMLWebSQL資料庫
- 資料庫設計簡單入門資料庫
- 資料庫的最簡單實現資料庫
- RUBY實踐—資料庫簡單操作資料庫
- Java操作Redis資料庫方法(簡單)JavaRedis資料庫
- Standby資料庫簡單建立過程資料庫
- PG 資料庫的 表的不完全恢復的簡易方法資料庫
- 基於 Hyperf+ SQL Server 實現的一個簡單資料庫 curdSQLServer資料庫
- SQL Server 資料庫損壞、檢測以及簡單的修復辦法SQLServer資料庫
- 【PG結構】Postgresql資料庫資料目錄說明SQL資料庫
- openGauss資料庫原始碼解析——慢SQL檢測資料庫原始碼SQL
- PG資料庫更新刪除卡死現象資料庫
- pg_dump 備份,恢復資料庫資料庫