產品經理學SQL(二)一天學會用SQL解決業(yè)務查詢問題(中篇)

18 評論 18065 瀏覽 152 收藏 8 分鐘

本篇旨在將實務中最常出現的詳細情況進行說明,從而解決產品經理80%的sql查詢任務;希望對大家有幫助~

前言

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

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

想回顧之前內容的可以點擊:

產品經理學SQL(一)一個小時上手SQL

產品經理學SQL(二)一天學會用SQL解決業(yè)務查詢問題(上篇)

條件子句(where)

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

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

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

where sage < 30

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

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

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

where sage between 10 and 20

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

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

where sage in (10,20,30)

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

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

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

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

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

where sname like “%王%”

5. 判斷是否為空值

通過is null關鍵字判斷值是否為空。

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

where sname is not null

6. 多個查詢條件

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

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

where sage<20 and ssex=’男’

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

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

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

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

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

查詢的SQL如下:

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

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

1. group by

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

2. 聚合函數

3. having子句

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

二、字段選擇(select)

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

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

三、結果呈現(order by)

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

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

四、后續(xù)學習

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

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

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

希望學完這三篇后能助你系統地入門SQL~

 

作者:Tomocat,女朋友是產品經理的數據分析師。

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

題圖來自 Unsplash,基于 CC0 協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 知乎上沒找到呢

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

    來自江蘇 回復
  3. 受用

    回復
  4. 請問樓主現在的知乎號叫什么?或者專欄文章名字叫什么?

    來自北京 回復
  5. 下載什么軟件啊

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

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

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

      來自福建 回復
    2. 找到了!

      來自福建 回復
    3. 為什么找不到呀

      來自北京 回復
    4. 你找了嗎

      來自北京 回復
  8. 下篇呢?

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

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

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

    回復
    1. 今天放假了

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

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

      回復