時(shí)間:2024-02-05 11:03作者:下載吧人氣:27
你有沒有碰到過有這樣一種場(chǎng)景,就是我們需要看一下某個(gè)時(shí)間段內(nèi)各種維度的匯總,比如這樣:最近三年我們賣了多少貨?有多少訂單?平均交易價(jià)格多少?每個(gè)店鋪賣了多少?交易成功的訂單有多少?交易失敗的訂單有多少? 等等…,假使這些數(shù)據(jù)的明細(xì)都在一個(gè)表內(nèi),該這么做呢? 有沒有簡(jiǎn)單方式?還有如何減少全表掃描以更改的拿到數(shù)據(jù)?
如果只是簡(jiǎn)單的利用聚合拿到數(shù)據(jù)可能您需要寫很多sql,具體表現(xiàn)為每一個(gè)問題寫一段sql 相互之間join起來,這樣也許是個(gè)好主意,不過對(duì)于未充分優(yōu)化的數(shù)據(jù)庫系統(tǒng),針對(duì)每一塊的問題求解可能就是一個(gè)巨大的表掃描,當(dāng)然還有一個(gè)問題就是重復(fù)的where
條件,所以能不能把相同的where
條件抽取出來以簡(jiǎn)化sql呢?讓我們思考一下,也許有這樣的解決辦法~ (結(jié)論是有,當(dāng)然有,哈哈哈~)
首先我提供下基本的表結(jié)構(gòu)及測(cè)試數(shù)據(jù)
基本表結(jié)構(gòu)
CREATE TABLE "order_info" ( "id" numeric(22) primary key , "oid" varchar(100) COLLATE "pg_catalog"."default", -- 訂單號(hào) "shop" varchar(100) COLLATE "pg_catalog"."default", -- 店鋪 "date" date NOT NULL, --訂單日期 "status" varchar(100) COLLATE "pg_catalog"."default", -- 訂單狀態(tài) "payment" numeric(18,2), -- 交易支付金額 "product" varchar(100) COLLATE "pg_catalog"."default" -- 產(chǎn)品名稱 );
網(wǎng)友評(píng)論