asp點擊按鈕sql列求和_助你2020晉級互聯網大數據陣營(一):輕輕松松學SQL

7631a647f1e7635208032088cf64eb91.gif

毫不負責任的說,你和數據科學家最大的鴻溝,就差一個SQL語言:)入門后,后面的事情就簡單了

cab6c187eee4eac5154ebe583cba8a2b.png

為了幫大家盡快入門Hive SQL、學會提數和分析,實現在大數據領域大干一場的愿望,幫你準備好了數據,準備好了SQL樣例,照著學,邊學邊練,主要是解決學一門新手藝起點高入手難的問題。

這個自編的課程分成如下的幾個部分,歡迎大家選讀選練。

  1. 特別說明

  2. 兩張示例表

  3. SQL示例

  • 簡單select查詢

  • 使用where語句按條件篩選

  • 使用distinct語句排重

  • 使用order by語句對查詢結果排序

  • 使用sum/count/avg計算總和/計數/平均值等

  • 使用group by按照分組計算

  • 子查詢

  • 使用join從多張表中查詢數據

  • 使用union all拼接多份數據

  • 使用case when控制列輸出

SQL高級教程(待續)

1. 特別說明

本文中使用的數據集是從網上下來的測試數據,數據地址:https://github.com/markgrover/cloudcon-hive

2. 兩張示例表

為了方便練習SQL語法,特地準備了兩張hive表,ide_test.flightside_test.airports, 表結構如下面的建表語句。另外兩張表中各有數行測試數據,可以在練習SQL時直接使用。

Flights表

CREATE TABLE `ide_test.flights`(`year` string COMMENT 'year',`month` string COMMENT 'month',`day` string COMMENT 'day',`dep_time` string COMMENT '起飛時間',`crs_dep_time` string COMMENT '計劃起飛時間',`arr_time` string COMMENT '到達時間',`crs_arr_time` string COMMENT '計劃到達時間',`carrier_code` string COMMENT '航空公司代號',`flight_num` string COMMENT '航班號',`actual_elapsed_time` string COMMENT '實際耗時',`crs_elapsed_time` string COMMENT '計劃耗時',`air_time` string COMMENT '飛行時間',`arr_delay` string COMMENT '到達延遲',`dep_delay` string COMMENT '起飛延遲',`origin` string COMMENT '起飛機場',`dest` string COMMENT '目標機場',`distance` string COMMENT '距離')COMMENT '測試數據-航班信息'
Airports表?
CREATE TABLE `ide_test.airports`(`name` string COMMENT 'name',`country` string COMMENT 'country',`area_code` string COMMENT 'area_code',`code` string COMMENT 'code')COMMENT '測試數據-機場信息'

3. SQL示例

3.1 簡單select查詢

使用select語句可以查看表里的數據

select用法

--查詢ide_test.airports表中的name列,返回5行select name from ide_test.airports limit 5--使用 '*'代表表中所有列select * from ide_test.airports limit 5
特別提示:限制SQL返回的行數是一個好習慣,如上面的 limit 5, 表示最多返回5行數據
3.2 使用where語句按條件篩選

使用where語句,可以根據指定的條件刷選數據,例如查看航班號為335的航班信息

where用法?

select     *   -- 返回表里所有列from     ide_test.flightswhere     flight_num= '335' --返回flight_num列為'335'的記錄limit 5
 Tips: where后面跟的是一個邏輯表達式,多個邏輯表達式用 AND、OR來連接
3.3 使用distinct語句排重

某一列(或多列)時常會有重復的值,有時候需要去重之后再查看,可以使用distinct語句來完成這個功能。例如查看ide_test.flights表中包含了那幾年的數據,可以使用下面的SQL語句來完成:

distinct 用法

selectdistinct year  -- distinct會對year列的值去重之后,再返回from     ide_test.flightslimit 10
Tips:查看某列包含了哪些值,有更好的寫法,這里只是展示下distinct語句的用法
3.4 使用order by語句對查詢結果排序

找出起飛時間最晚的5個航班

order by 用法

select     origin, dest, flight_num, dep_timefrom     ide_test.flightsorder by dep_time desc-- 按照起飛時間倒序排列, desc表示由大到小排序, -- asc(或者是省略不寫)表示由小到大排序 limit 5
3.5 使用sum/count/avg計算總和/計數/平均值等

使用count()函數可以計數,比如要看一下ide_test.flights表里一共有多少個航班信息,則可以這么寫:

count 用法?

selectcount(flight_num) as cnt -- count函數表示計數from     ide_test.flightslimit 10

sum:表示按照指定的列求和,比如計算一下335號航班一共飛行了多少公里

sum 用法

selectsum(cast(distance as int)) as total_distance --sum函數表示求和from     ide_test.flightswhere     flight_num = '335'limit  10
Tips: count/sum這種函數叫聚合函數,還有其他聚合函數,比如avg/max/min分別用戶求平均值、最大值和最小值
3.6 使用group by按照分組計算

group by語句的用處很大,它可以先對數據分組、然后再計算,看個例子就明白了。比如,要計算每個航班飛行的里程數,并按照總數由大到小取前10個,寫法如下:

group by 用法

select     flight_num, sum(distance) as total_distance--除了sum/count/avg/min/max這些聚合函數之外,-- 明確寫在select之后的列,必須同時出現在group by的后面from     ide_test.flightsgroup by flight_num  --按照航班號分組,對每一組的里程數求和order by total_distance desclimit  10
還有一種情況,查詢總飛行里程數大于3000的航班號,這時having語句就排上用場了

having 語法

select     flight_num --寫在select之后的列,必須同時出現在group by的后面from     ide_test.flightsgroup by flight_numhaving sum(distance) > 3000--刷選出飛行總里程大于3000的航班limit  5
小思考:為什么這種情況下要使用having來作為篩選條件,而不是使用where?

資料:深入理解Hive Group by語法

3.7 子查詢

要計算飛行總里程大于3000的航班數量,SQL可以這么寫

子查詢用法

select count(1) as cntfrom (select flight_numfrom  ide_test.flightsgroup by flight_numhaving sum(distance) > 3000 ) t
Tips: 子查詢的用法和普通hive表是一樣的,一般為了清晰,會使用括號'()'把子查詢包含起來
3.8 使用join從多張表中查詢數據

假如,我們計劃查詢每個航班的飛行里程和起始機場名稱,因為這兩個信息分別存儲在兩張不同的hive表中,因此需要同時查詢兩張hive表才能得到結果,寫法如下

join 用法?

select     p.flight_num, -- 從flights表取出航班號     p.distance, --從flights表取出飛行里程     q.name  --從airports表取出出發的機場名稱from     ide_test.flights pleft join ide_test.airports qon p.origin = q.codelimit 10
Tips
  • left join:左表關聯右表,當坐標中存在某值而右表不存在時,則右表對應信息使用null代替

  • inner join:只有左表和右表都存在對應值的時候,才出現的結果中

  • right join:與left join相反

  • full outer join:當左表或右表不存在相應值時,使用null代替

延伸閱讀,做做思維操

8d4c8a801175e4ef7ebd48ca77c8ffc2.png

注意:如果A中有m條記錄,B中有n條記錄,A join B的時候,則最多會產生m*n條記錄,想想為什么?

3.9 使用union all拼接多份數據

UNION 語句符用于合并兩個或多個 SELECT 語句的結果集。

選出飛行里程大于1000或小于100的航班,SQL寫法如下:

注意:這里只是為了展示union用法,顯然應該有更好的寫法,自己思考下:)

union 用法?

select flight_numfrom ide_test.flightswhere distance > 1000unionselect flight_numfrom ide_test.flightswhere distance < 100
Tips: 請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同
3.10 使用case when控制列輸出

查詢航班的飛行距離,按照距離分成“長、中、短”三個級別,可以借助case when語句來實現,示例寫法:

case when 用法?

select flight_num, distance,case when distance > 3000 then '長距離航班'when distance > 1000 then '中距離航班'else '近距離航班'end as flight_levelfrom ide_test.flightslimit 10
Tips: 使用case when可以靈活自定義查詢結果。另外case when還可以和count/sum等聚合函數使用,來實現有條件的計數/匯總

4. SQL高級教程(待續)

  • window函數

  • 處理Json格式數據

  • 處理XML格式數據

  • 行列轉換

  • 使用with語法

  • 數據抽樣

646f53abceba8f2d5e2128037fccefd3.png

/完

其他文章:

  • 通過在阿里的實踐,談一下中臺建設的Why、When與How

  • CTO內參 | Gartner報告,近年十大戰略性技術趨勢:自主設備、增強分析、AI驅動的開發、數字雙生、邊緣計算等

  • 從黨的成功經驗看企業中臺建設

*每次「在看」,都是鼓勵* ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271457.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

冪等和高并發在電商系統中的使用

在Java web項目開發中&#xff0c;經常會聽到在做訂單系統中生成訂單的時候&#xff0c;要做冪等性控制和并發控制&#xff0c;特對此部分內容作出總結&#xff0c;在高并發場景下&#xff0c;代碼層面需要實現并發控制&#xff1b;但是冪等性&#xff0c;其實更多的是系統的接…

@transactional注解失效情況

先來了解一下Transactional注解事務的特性吧&#xff0c;可以更好排查問題 1、service類標簽(一般不建議在接口上)上添加Transactional&#xff0c;可以將整個類納入spring事務管理&#xff0c;在每個業務方法執行時都會開啟一個事務&#xff0c;不過這些事務采用相同的管理方…

計算機c盤隱藏了怎么辦,win7怎么隱藏c盤 win7c盤被隱藏了怎么解除

很多的電腦用戶擔心其他用戶在使用電腦時修改c盤中的重要文件&#xff0c;所以會將c盤設置為隱藏&#xff0c;那么大家知道在win7系統中怎么隱藏c盤嗎?方法很簡單&#xff0c;下面小編為大家帶來win7隱藏c盤的詳細教程&#xff0c;不知道怎么隱藏的朋友可以查看下面的教程學習…

操作系統基礎:存儲管理知識筆記(二)

一、分頁存儲管理 1、分頁存儲管理介紹 1.1 分頁原理 頁&#xff1a;將一個進程的地址空間劃分為若干個大小相等的區域稱為頁。 塊、頁框&#xff1a;主存空間劃分成與頁相同的若干個物理塊。 1.2 地址結構 分頁系統地址結構&#xff1a;前一部分為頁號&#xff1b;后一部分為頁…

人工智能 信道估計 深度學習_DEMO演示|基于IVP02D 人工智能工作站的深度學習引擎,實現人群熱力估計...

近年來&#xff0c;隨著深度學習在計算機視覺領域獲得廣泛應用&#xff0c;算法框架也日漸成熟&#xff0c;例如基于深度神經網絡的人群密度分析&#xff0c;通過自動學習能獲得更有效的人群特征&#xff0c;相較于傳統方法取得了一定的提高。AI小知識人群密度分析&#xff08;…

SPSS學習中涉及的統計知識

1、獨立性檢驗 2、方差分析中方差齊性檢驗 3、非參數檢驗 4、p-p圖 5、卡方檢驗&#xff1a;研究分類因變量與分類自變量的關系。獨立性檢驗 6、t檢驗&#xff1a;研究連續因變量與分類自變量的關系。 7、啞變量 總結&#xff1a; 因變量連續&#xff0c;自變量連續&#xff0c…

vscode kite插件_微軟發布 VS Code Python 插件 7 月更新

微軟發布了 7 月的 Visual Studio Code Python 擴展更新&#xff0c;此版本總共修復了 51 個問題&#xff0c;其中包括&#xff1a;支持新的語言服務器&#xff1a;PylanceGather 擴展將 Notebook 導出為 HTML 和 PDF調試器的反向連接支持新的語言服務器&#xff1a;PylancePyl…

360瀏覽器打不開微信的連接服務器,上午還能打開,下午360瀏覽器打不開微信公 – 手機愛問...

2011-08-27ie&#xff0c;搜狗&#xff0c;谷歌瀏覽器都打不開&#xff0c;說打不開ipad說服務器超時是新浪在更新設備嗎&#xff1f;一般你能進入愛問就可以進入郵箱&#xff0c;下面的方法看看(如果你是鐵通的可能是鐵通的問題)。可能是服務器故障引起的&#xff0c;請不要著…

域名還能綁定動態IP?看完又漲知識了!!

點擊上方藍色“冰河技術”&#xff0c;關注并選擇“設為星標”持之以恒&#xff0c;貴在堅持&#xff0c;每天進步一點點&#xff01;作者個人研發的在高并發場景下&#xff0c;提供的簡單、穩定、可擴展的延遲消息隊列框架&#xff0c;具有精準的定時任務和延遲隊列處理功能。…

java 及時釋放內存_JMM(一):初識Java內存模型

在并發編程中&#xff0c;線程之間的通信是一個很關鍵的問題&#xff0c;而該問題解決方案主要可分為兩大類&#xff1a;消息傳遞、共享內存。前者有以Erlang語言為代表的Actor模型&#xff0c;而后者中典型的則是Java語言。對于消息傳遞機制而言&#xff0c;線程之間必須通過發…

php 復習

對所學知識的依次基礎的總結 <?php一.php基礎語法 1.輸出語句&#xff1a;**echo(可以輸出多個字符串); print&#xff08;輸出一個字符串&#xff09;; print_r&#xff08;輸出數組&#xff09;; **var_dump()&#xff08;具體 的數據 還有它的類型&#xff09;;2.php是弱…

mac新建文件夾快捷鍵

mac新建文件夾快捷鍵 COMMAND SHIFT N

python382怎么用_用python做UDP連接

寫個客戶端 #!/usr/bin/env python from socket import * HOST 10.2.167.115 PORT 20001 BUFSIZE 1024 ADDR (HOST, PORT) udpClientSock socket(AF_INET, SOCK_DGRAM) while True: data raw_input(Enter the message you want to send >) if not data: break udpClie…

更新系統后魔獸世界無法連接至服務器,《魔獸世界:熊貓人之謎》5.0launcher更新無法連接服務器解決方法...

早上launcher一半的時候&#xff0c;出現無法鏈接服務器&#xff0c;并且自動關閉。測試多種辦法&#xff0c;已經解決。1、打開目錄x:/world of warcraft/temp2、運行目錄下&#xff1a;wow-4.3-5.0.15890-zhcn-downloader.exe (一個英文下載器)3、報錯could not connect to t…

電腦維修知識:電腦常見故障維修大全及解決方法

電腦已經成為我們學習生活娛樂必不可少的設備了&#xff0c;用得時間久了難免會遇到小故障&#xff0c;今天我們一起來看下遇到常見的電腦方面的小故障&#xff0c;我們應該如何去自己檢測和維修吧。電腦檢測故障我們還是要從電腦的幾大硬件開始檢查起。1、CPU打開機箱查看CPU風…

工程圖樣中粗實線的用途_圖紙天天畫,粗實線和細實線的線寬比例是多少?2:1還是3:1?...

點擊上方頭條號“機械設計一點通”關注我們&#xff0c;每天學習一個機械設計相關知識點我們知道&#xff1a;機械制圖中為了表示不同內容&#xff0c;并能分清主次&#xff0c;必須使用不同線型。圖線的線型由線寬和線素長度等構成&#xff0c;機械制圖中各種線型都有相應寬度…

STM32F4_USART配置及細節描述

Ⅰ、概述 關于USART串口通信&#xff0c;可以說是MCU的標配。不管是在實際項目應用中&#xff0c;還是在開發過程中&#xff0c;它都起著很重要的作用。 在項目應用中我們常常使用UART串口進行通信&#xff0c;根據通信的距離及穩定性&#xff0c;還選擇添加RS232、RS485等對UA…

騰訊面試:SaaS多租戶,如何設計?

尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中&#xff0c;最近有小伙伴拿到了一線互聯網企業網易、美團、字節、如阿里、滴滴、極兔、有贊、希音、百度、美團的面試資格&#xff0c;遇到很多很重要的面試題&#xff1a; 多租戶設計&#xff0c;如何 技術選型&#xff…

Mac中Finder是什么?怎么打開?

很多人都知道windows系統中的資源管理器&#xff0c;不過不知道什么是finder。finder和資源管理器一樣&#xff0c;都是用來管理文件&#xff0c;finder存在于mac統中&#xff0c;那么finder有什么作用呢?下面下班就為大家分享關于mac系統中finder的相關內容。   1、怎么打開…

phpstudy頁面不存在_網站的404頁面對于SEO的重要作用

隨著網站建設的需求和要求越來越多&#xff0c;網站的新形式也逐漸成為人們改版的方向&#xff0c;但是在網站的改版中難免會出現一些小差錯&#xff0c;導致網站的運行不順暢&#xff0c;這很有可能就是網站建設中忘記設計404頁面&#xff0c;那么4040頁面能給網站帶來哪些好處…