前一段時間的工作中有一項是計算實時統計結果並生成相應的資料表(主要是算產品pv,uv的環比什麼的)。
所謂實時統計,就是終端請求server介面時把相應資料寫進日誌,然後使用python分析日誌程式,將各統計項整理成各自的檔案。再將這些整理好的檔案定時傳送到解析檔案介面中解析並入庫。最後寫sql計算統計結果。
順便提一句,我們用的是mysql,單庫千萬量級以下的資料都沒問題。例如每天往表裡寫2w資料,則10000000/20000 = 500天內不需要優化。
回到正題,下面是這個sql中使用到的一些技巧(sql實在太長就不貼了):
1.select子句中的條件查詢:
(case
when sd.type=1 then (select a.title from db1.apk a where a.id=sd.materialid)
when sd.type=2 then (select d.title from db1.ad d where d.id=sd.materialid)
when sd.type=3 then (select w.title from db1.wall***** w where w.id=sd.materialid)
end) as title,
原來也知道在sql中可以寫條件查詢,但是沒用過,這次用了一下,就是case...when...then...[else] ...end...
2.多庫join查詢:
說實話,這個原來確實沒聽說過(不知道其它資料庫如oracle什麼的是不是也有這個功能).上網查了一下才發現的,自己試一試果然沒問題。所謂多庫join就是不同資料庫中的表進行關聯查詢。
解決方法:在mysql中其實很簡單,就是查詢時在表名前加上資料庫名就行啦:)
例如上面的sql語句,db1是乙個庫中的表,將其查詢結果作為db2表中的查詢列(當然做join等操作也是沒問題的)。
select
sd.stattime,sd.type,sd.materialid,sd.pv,sd.token,
(select sum(totalpvtab.pv) from statdetail totalpvtab where
totalpvtab.stattime=sd.stattime and totalpvtab.materialid=sd.materialid and totalpvtab.type=sd.type) totalpv,
from ....
就是將外層查詢的列作為子查詢的查詢條件了。
4.sql函式:
還用到一些sql函式如:
datediff(sd.stattime,a.createdtime) -- 計算兩個日期天數差,
abs(x) -- 取x絕對值,
等等。先寫到這裡吧,明天繼續。
工作中的sql語句總結
1,查詢mysql 資料庫 自動 新增 序號 欄位列1,2,3,4 1 a,select rowno 0 b 2,mysql的分頁語句 limit後面第乙個引數是index,從0開始 第二個引數是pagesize string sql string.format gridprop.filterstr...
工作中的sql
isnull like top order by desc convert substring as 工作中的例子 1.select top 1 convert float,isnull gryjce,0.001 2 as gryjce from vet gryjce zgzt where kh c...
乙個案例說說工作中的溝通
程式不會有錯的,都是人的錯 最近一直是6 8 6 22 00 工作狀態,正解決程式中出現的問題時,老大來了上面的一句話,小夥伴們都驚呆了,在這樣的夜晚,安靜的辦公室,噠噠的鍵盤聲中,這麼驚悚的一句話似乎要將所有麻痺狀態下的小夥伴驚呆呀!回到主題,先看乙個案例,該案例 於開發生活,可能有高於生活,但絕...