日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql count用法_SQL是一门手艺

發布時間:2024/10/14 数据库 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql count用法_SQL是一门手艺 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL不是一門語言,而是一門手藝。

把SQL當手藝來學

1.行列過濾

2.數據變換

3.合并連接

4.聚合透視

奇怪的用法

  • 把SQL當手藝來學

所謂手藝,要求心手相連,每一門手藝的背后,都閃現著手藝人的心血與智慧。SQL也是。

SQL: Structured Query Language,結構化查詢語言。實際上也有戲稱是標準查詢語言的,并不為過,SQL誕生于1974年,基于關系數據庫(也就是表格),發展至今毫無衰落跡象,反而滲透到各個數據處理工具/系統中:傳統數據庫、Hive數據倉庫、MongoDB支持類SQL,甚至玩dataframe表格的R語言也可以通過sqldf包寫sql,Spark、Flink也可以寫SQL,等等。玩數據分析,學好SQL無往而不利。

如果把SQL當語言來學,那么學習路徑是單詞、語法、技巧,學完后一團亂麻?

當手藝來學,就要先修內功——分析思路,再按分析所需的功能學用法,將會無比通暢。試想我們拿到表格形式的數據,要怎么操作分析?16個字:

行列過濾、數據變換、合并連接、聚合透視

以下以hive為例來說,先簡化幾個表:

1. 行列過濾

select seword? --列過濾

from ks.selog

where uid=1002 ?--行過濾
搞笑視頻

從ks.selog表格中找出uid=1002的行中的 seword列。簡直就是自然語言啊,你說氣人不~

from一個表,select結果也是個表。

2.?數據變換

select os, case os when 'iphone'?then 1 when 'android'?then 2 end as osid

from ks.selog

iphone,?1

iphone, 1

android, 2

利用case-when將os變換成id。現在看這一串單詞就不覺得頭疼了吧。

大部分SQL教程會堆砌各種函數、語法,不怕,我們知道都是為了做數據變換,分門別類的來看:

- 字符串函數:

? ? length(),變upper(),截substr(),拆split(),拼concat()…

- 數值計算:

? ? +-*/模%,舍入round(),隨機rand(),取整ceil()floor(),數學sin()…

- 日期函數:

? ? year(),month(),day(),minute(),date_add()…

- json抽取:?

? ? get_json_object('{"button":"cancel"}','$.button') 得到cancel

- url參數抽取:

? ? ?parse_url(a_url, 'HOST'), parse_url(a_url, 'QUERY' , 'speachid')

- 字典取KV:?

? ? event_urlparams['speachid']

- 數組取元素:

? ??displayresult[1] 第一條展現結果

- if函數,case子句

- 類型轉換: cast('2' as int)?

3.合并連接

select t1.uid, word, gender

from

(

select uid,seword word from ks.selog

union all

select uid,sdword word from ks.sdlog

) t1

join

(

select uid,gender from ks.profile

) t2 on t1.uid=t2.uid

1001,手工耿, 男

1001,央視直播,男

1002,搞笑視頻,女

1002, 央視新聞,女

稍微復雜些了。來看其中的關鍵點,

union all ,將2個格式一致的select查詢結果合并。

子查詢 () t ,用括號包含查詢語句并命名為t,查詢結果是一個表格,這是一個隱含表,可以被select。

Join on,把2個表按某個字段連接起來,把右表中的信息連到左表上。

不沉溺于sql中的關鍵字,用輸入一個表操作后輸出一個表來看,畫一下這個過程

4.聚合透視

select os,sum(1) sepv,count(distinct uid) seuv

from ks.selog

group by os

iphone, 2, 1

android, 1, 1

聚合指按某幾列聚合group by,得到的結果是維度列os和指標列sepv計數、seuv去重計數。指標列由聚合函數計算得到,指標列可以直接計算。

透視不是sql強項,一般通過SQL得到聚合的數據,在Excel、Pandas進行透視

16字說完了,其中合并連接是最強大之處,多個表格在不同的地方,非常常見,在SQL里只管按需union join即可。union?好說,列名一致就行,join則會面臨左右表要連接的字段參差不齊,也就引申出好多種join,只記基礎的3種足夠用

現在挑戰一下

select gender,case when cate is NULL then '其他' when cate='發明' then '發明創造' else cate end as newcate,

? ? count(1) pv,count(distinct t1.uid) uv,count(1)/count(distinct t1.uid)/1000 avgpv_k,

? ? sum(if(t3.cate is NULL,0,1)) useless

from?

(

select uid,upper(seword) word from ks.selog?

union all?

select uid,upper(sdword) word from ks.sdlog?

) t1

join

(

select uid,if(gender is not NULL,gender,'') gender from ks.profile

) t2 on t1.uid=t2.uid

left outer join

(

select distinct word,cate from ks.query_cate

) t3 on t1.word=upper(t3.word)

group by gender,case when cate is NULL then '其他' when cate='發明' then '發明創造' else cate end

現在看這一坨臭長的中英文字符還是亂碼嗎?

[我們理解了1+1=2,那么就很容易理解復變函數和切比雪夫不等式啦 @_@||-_-||]

奇怪的用法

qg1:透視

為了吹SQL,還是寫一下sql的透視,閑的慌

select os,?

? ? count(if(p_date=20201111,seword,NULL)) c20201111,?

? ? count(if(p_date=20201119,seword,NULL)) c20201119

from ks_mmu.selog

group by os

啥時候會這樣枚舉結果列?比如數據量很大,Excel搞不定了,又很明確有哪些列可以枚舉。比如要對一天內用戶的活躍小時進行聚類分析,要得到 就可以這樣寫sql。

qg2:hive借java能力做數值變換

select reflect("java.lang.Math", "round", 2.5)

就問騷氣不騷氣~

qg3:寫python代碼嵌入sql執行

# python代碼,存儲為 x.py

import sys

os_id={"iphone":1, "android":2}

for line in sys.stdin:

??? fs=line.rstrip("\n").split("\t")

??? os=fs[0]

??? osid=os_id.get(os, 0)

??? print "%s\t%s"%(os, osid)

hive -e" add file ./x.py;? --定位到所寫腳本

select TRANSFORM(os) -- 將原始列傳給x.py

USING 'python x.py'? --用x.py逐行處理并輸出

as (os string,osid string) --腳本輸出的\t分割的各列新名字

from ks.selog --其他sql語法不變

"

iphone, 1

iphone, 1

android, 2

再問是不是更騷氣~

qg4:行列互轉


最后總結一下:

1.行列過濾

2.數據變換

3.合并連接

4.聚合透視

這不是一篇教程,要教程是官網看,詳細到每一個關鍵字,夠看好幾天;

這只是一個視角。

不要滿腦子想select from where group,而想我要對表格的數據做什么,SQL這個工具能幫我,工具練熟了心手合一,就掌握了一門手藝。

荒年餓不死手藝人

總結

以上是生活随笔為你收集整理的sql count用法_SQL是一门手艺的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。