產(chǎn)品經(jīng)理學SQL(二)一天學會用SQL解決業(yè)務(wù)查詢問題(中篇)

18 評論 18019 瀏覽 151 收藏 8 分鐘

本篇旨在將實務(wù)中最常出現(xiàn)的詳細情況進行說明,從而解決產(chǎn)品經(jīng)理80%的sql查詢?nèi)蝿?wù);希望對大家有幫助~

前言

之前我們已經(jīng)用一個例子介紹了SQL的語法順序和執(zhí)行順序,想必現(xiàn)在你已經(jīng)知道了一個完整的SQL包括條件子句(關(guān)鍵字where)、分組查詢(關(guān)鍵字group by)、字段選擇(關(guān)鍵字select)和結(jié)果呈現(xiàn)(關(guān)鍵字order by)。本篇我們旨在將實務(wù)中最常出現(xiàn)的詳細情況進行說明,從而解決產(chǎn)品經(jīng)理80%的sql查詢?nèi)蝿?wù)。

產(chǎn)品經(jīng)理學SQL(二)一天學會用SQL解決業(yè)務(wù)查詢問題系列共包括前中后三篇,建議學習時間為一天

想回顧之前內(nèi)容的可以點擊:

產(chǎn)品經(jīng)理學SQL(一)一個小時上手SQL

產(chǎn)品經(jīng)理學SQL(二)一天學會用SQL解決業(yè)務(wù)查詢問題(上篇)

條件子句(where)

1. 比較運算符(適用于區(qū)間)

比較運算符包括=(等于),>=(大于等于),<=(小于等于),!=(不等于),>(大于),<(小于)。

例如:查詢年齡sage小于30的學生

where sage < 30

2. 確定范圍(適用于連續(xù)范圍)

between … and …為取值限定了一個范圍。

例如:查詢年齡大于等于10小于等于20的學生

where sage between 10 and 20

3. 確定集合(適用于離散的少數(shù)值)

例如:插入年齡為10,20,30的學生

where sage in (10,20,30)

**in可以和not一起使用,表示不在這個區(qū)間的值

**where sage not in (10,20,30)

4. 字符匹配(模糊查詢)

通過like關(guān)鍵字和正則表達式匹配,常用的通配符有%(任意個字符)和_(一個字符)。

例如:查詢名字sname帶“王”的學生

where sname like “%王%”

5. 判斷是否為空值

通過is null關(guān)鍵字判斷值是否為空。

例如:查詢姓名sname不為空的學生

where sname is not null

6. 多個查詢條件

用and(兩個條件同時滿足)和or(兩個條件滿足一個即可)

例如:查詢年齡sage小于20且性別ssex為男的學生

where sage<20 and ssex=’男’

一、分組查詢(group by&聚合函數(shù)&having子句)

分組查詢實現(xiàn)了類似excel中數(shù)據(jù)透視表的功能,可以幫助我們對數(shù)據(jù)進行分層匯總,而我們對分層后的數(shù)據(jù)進行統(tǒng)計的時候需要用到聚合函數(shù)(也就是平均值、求和、最大值和最小值等),最后我們對分層之后的數(shù)據(jù)篩選的時候需要用到having子句。

**where子句是對原始表做篩選的

**having子句是對分層匯總之后的結(jié)果做篩選的

回顧我們上一篇講過的例子:在限定學生表學號小于等于6的一批學生中,查詢每門課的最高成績(最高成績低于70分的課程不顯示),然后根據(jù)課程最高成績降序排列取前兩條記錄。

查詢的SQL如下:

回顧一下執(zhí)行順序,首先我們用where子句對原始數(shù)據(jù)做了學號id需要小于等于6的限制。然后我們用group by和max(score)聚合函數(shù)實現(xiàn)了對課程進行分層,求出每門課的最高成績,為了對聚合之后的結(jié)果作限制,我們用having子句只展示最高分數(shù)大于等于70的記錄。

關(guān)于這個例子詳細解釋可以回顧上篇文章,下面我們詳細介紹每個部分的常用語句。

1. group by

group by不僅可以對一個字段進行分組,還能對多個字段進行分組。這和excel中的數(shù)據(jù)透視表一致。

2. 聚合函數(shù)

3. having子句

和where子句一致,只需注意是對聚合后的結(jié)果作限制。

二、字段選擇(select)

select比較靈活,我們不單單能選擇原始數(shù)據(jù)表的字段,還能使用函數(shù)對字段進行計算,正如我們第一篇提到的,函數(shù)并不是重點,當你需要的時候百度或者問技術(shù)小哥就知道了。我們這里只簡單介紹一下可以對字段進行計算。

例如:查詢各學生的年齡(通過公式計算年齡)

三、結(jié)果呈現(xiàn)(order by)

  1. 和excel一樣,可以用多個字段排序
  2. 關(guān)鍵字desc表示降序排列

例如:查詢學生id和年齡,并先按照學號sid降序,再按照年齡sage升序排列

四、后續(xù)學習

本篇文章的目的主要是幫助非技術(shù)人員在初步知曉SQL語句的情況下在一天之內(nèi)系統(tǒng)入門SQL,從而解決80%的sql查詢問題。

但是由于建議學習時間為一整天,全部內(nèi)容置于一篇文章一方面過于冗長,另一方面影響讀者趁熱打鐵(作者是上班族,更新比較慢哈望諒解~),因此我把一天學會用SQL解決業(yè)務(wù)查詢問題分為上中下三篇。

上篇已經(jīng)介紹了SQL的語法順序和執(zhí)行順序的區(qū)別并仔細剖析了SQL的執(zhí)行順序;這篇詳細介紹了條件子句、分組查詢和排序的細節(jié);下篇會介紹表的連接和其他常用關(guān)鍵字。

希望學完這三篇后能助你系統(tǒng)地入門SQL~

 

作者:Tomocat,女朋友是產(chǎn)品經(jīng)理的數(shù)據(jù)分析師。

本文由 @Tomocat 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 知乎上沒找到呢

    來自北京 回復(fù)
  2. 那個排序那邊,默認升序ASC吧,按照你要取得成績前兩位,應(yīng)該在order by 的后面加desc吧

    來自江蘇 回復(fù)
  3. 受用

    回復(fù)
  4. 請問樓主現(xiàn)在的知乎號叫什么?或者專欄文章名字叫什么?

    來自北京 回復(fù)
  5. 下載什么軟件啊

    來自河北 回復(fù)
  6. 非常感謝樓主的分享,清晰易懂,很有幫助

    來自北京 回復(fù)
  7. 發(fā)文審核顯示觀點不清晰沒給過,想看下篇可以關(guān)注我的知乎號,然后在專欄里面看。知乎號:網(wǎng)癮大叔。

    回復(fù)
    1. 謝謝樓主的分享!另外,知乎上面找不到您呀,您的文章名字叫什么呢?

      來自福建 回復(fù)
    2. 找到了!

      來自福建 回復(fù)
    3. 為什么找不到呀

      來自北京 回復(fù)
    4. 你找了嗎

      來自北京 回復(fù)
  8. 下篇呢?

    來自北京 回復(fù)
  9. 樓主請問下篇什么時候出呢?感恩

    來自上海 回復(fù)
    1. 抱歉,通不過人人都是產(chǎn)品經(jīng)理社區(qū)的審核,以后應(yīng)該都在知乎平臺更新了。

      來自北京 回復(fù)
  10. 今年放假了,最近兩天想花點時間做個2018電影年終盤點,sql的教程先擱置下~

    回復(fù)
    1. 今天放假了

      回復(fù)
  11. 之前我都是自己在菜鳥網(wǎng)站上看教程,看得很累,感謝樓主的整理;
    還有就是建議搞些測試庫,新手純閱讀式學習,一下就忘了

    來自香港 回復(fù)
    1. 測試案例的話后續(xù)會更新的

      回復(fù)