sql获取某列出现频次最多的值_业务硬核SQL集锦
戳上方藍字關注我?
? ? 這兩年學會了跑sql,當時有很多同學幫助我精進了這個技能,現在也寫成一個小教程,反饋給大家。
? ? 適用對象:工作中能接觸到sql查詢平臺的業務同學(例如有數據查詢權限的產品與運營同學)
? ? 適用場景:查詢hive&mysql上的數據
????文檔優勢:比起各類從零起步的教程教材,理解門檻低,有效信息密度大,可以覆蓋高頻業務場景。? ?
????文末有一些常見的小技巧,希望幫助同學們提升工作效率。
SQL的基礎結構:
做一個類比,我們用的“表”,就像是一個賬本,每天就是一個“分區”,“字段”就是日記上記的不同的事情,例如支出、收入、物品和價格等;
一般來講sql有如下結構,意思是從表α.table里面,獲取某一天的abc三個字段,后面的講解都是在這個基礎上展開的:
多個條件同時生效-and和or
and的用法--表示多條件同時生效
or的用法--表示有一個條件生效即可
對指標進行加和--sum
學習到本節時,我們需要明白維度和指標的區別,維度是表示屬性的,指標是表示量級的,例如全中國有56個民族,全中國就是一個維度,民族數量就是一個指標
為字段重新命名--as
查數據條數,或查詢維度的數量--count和distinct
對一份數據做多次處理--嵌套結構
如下sql查詢了每個人在當天的頁面訪問頻次。3到7行先查詢出每個用戶id的頁面訪問頻次,然后使用3到7行的結果,查詢每個訪問頻次下,有幾個id:
對多份數據做關聯處理--join
最常用的場景:假設表A上有門店id是a,收入是b,表B上有門店id是a,門店名稱c,如果需要獲取門店id,收入,門店名稱的關系,可以這么寫:
放下這張圖,形象的表達了各種join方法,獲取的數據范圍。想獲取對應數據時,替換上邊第7行就可以用:?
(圖片來源于網絡,侵刪)
條件判斷,對同一個字段做區分計算--if 和case when
判斷一次是否--if
判斷一次或多次是否--case when
多加判斷的方式見4和5兩行:
除法取整--floor
篩選字段為空/不為空的方法--null
各種常見類型字段、指定值的查詢方法:
string:加單引號即可,例如一個字段type是string,就可以寫:
bigint:后面加一個L,例如一個字段type是bigint,就可以寫:
array:XXX代表數組內的字段類型,需要根據此類型的方式取數,假設model字段的類型是array:
json:json經常會出現字段包字段的情況,例如常用的data是個json字段,里面會有a字段,a字段里面還會有b字段,如果想取出b,我們應該這么寫:
擴展閱讀
一些提升效率的方法
時間分區有多種存儲方式,查詢where條件的時候需要注意:有的表是‘yymmdd’,有的表是‘yy-mm-dd’;字段名也不固定,有的表是p_date,有的表是date,但是對于單個表,分區字段一般是固定的,例如你經常查a.bcde這個表,上次他的時間分區格式是date=‘yymmdd’,下次查的時候它還會是date=‘yymmdd’;
有時表中的時間戳不是常見的yymmdd,而是一串數字,如果where條件里需要卡時間戳,卻不知道日期對應的一串數字是什么,可使用時間戳轉換器轉換:https://tool.lu/timestamp/
sql沒數、跑錯怎么辦:有時解析功能沒有發現問題,但是數據直觀感覺不對,可以用如下方式自查:
檢查相關表的分區,和你取的分區一致不一致,例如日期有多種格式,例如yymmdd,yy-mm-dd,yy-mm-dd 00:00:00等等;
如果sql包含多個部分,比如有join,可以把其他部分的sql注釋掉,分別看每個部分的sql哪里有問題;(注釋方式:代碼前加“--” ?例如 ?--select ...)
需要研究單個json字段的邏輯:可以用這個網址整理json字段,方便閱讀:https://www.json.cn/
同時編輯多行,可以按住shift+alt/option,鼠標點擊起始行和結束行,就能同時編輯多行了,例如批量
常用概念的解釋
全量表和增量表
增量表:每天存下來的數據,是當天產生的所有數據,例如日記,每日走路的步數,銀行每天的收支信息等;
全量表:每天存下來的數據,是從有表開始所有的數據,相當于每天抄一份歷史上所有的日記,再寫今天的日記,例如銀行賬戶的余額;
不同數據庫的區別
mysql等實時查詢的數據庫:一般沒有分區概念,存儲的數據比較少,但是響應快;
hive等離線查詢數據庫:有分區概念,可以較低成本的存儲海量數據,支持各種復雜處理,查詢速度一般比mysql慢。
總結
以上是生活随笔為你收集整理的sql获取某列出现频次最多的值_业务硬核SQL集锦的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为交换机综合实验
- 下一篇: mysql ddl dql_mysql