国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你在工作中常用到的那些SQL

數據庫
這篇文章來記錄一下我曾經忘掉的group查詢、join查詢等一些比較實用/常用的SQL。

[[272989]]

這篇文章來記錄一下我曾經忘掉的group查詢、join查詢等一些比較實用/常用的SQL。

本文主打通俗易懂,不涵蓋任何優化(適合新手觀看)

一、回顧group 查詢

group查詢就是分組查詢,為什么要分組查詢?因為我們想按某個維度進行統計。下面來看個圖: 

 

現在我的數據如下  

比如說,我想知道:每天Java3y這個公眾號的點擊量是多少。按我們人工而言,思路很簡單:把相同的天數以及公眾號名稱為Java3y的數據找出來,再將每個點擊量相加,就得出了結果了。

 

 

步驟

 

 

用上SQL我們可能會這樣寫:

  1. select name,time,sum(pv) as pv from xxx_table where name = 'Java3y' group by name,time 

1.1 group 查詢可能存在的誤解

記得有一天,有個群友在群上問了一個問題:

 

 

群里邊的一個問題

 

 

其實他的需求很簡單:檢索出數據分組后時間最高的記錄。但他是這樣干的:

  1. 把先按照時間 order by
  2. 對order by后的記錄進行分組

示例圖:

 

 

群里面的一個圖

 

 

1.2 造成這個誤解的可能原因

有的工具可以支持這種的寫法:

  1. select * from xxx_table group by name 

這種寫法沒有被禁止,并可以得出結果,比如得到的結果是:

  1. Java4y 20 7月15號
  2. Java3y 30 7月15號 

這種寫法其實是不合理的,要知道的是:使用group by分組統計之后,我們的select 后面只能跟著group by 的字段,或者是聚合函數。

 

 

group by規則 

因為,我們對數據進行了分組查詢,數據的分布情況,我們是不關心的。

記住:先分組,后統計(先把數據歸類后,再對相同的數據進行統計)

1.3 group查詢常用的SQL

去重是我們經常會遇到的問題,打個比方說,由于各種原因(不管是業務上還是說是臟數據),現在我有兩條重復的數據(除了ID,其余的字段都是相同的):

 

 

重復的數據 

我這邊只希望留下某一條記錄作為查詢結果就好了,我們可以寫下以下的SQL:

  1. select * from user where id inselect min(id) from user where name = 'Java3y' and pv = 20 and time='7-25' group by name,pv,time;) 

上面這條SQL是非常非常實用的,除了我說的去重以外,其實我們可以再”思考“一下:

上面已經說了,使用group by分組統計之后,我們的select 后面只能跟著group by 的字段,或者是聚合函數。

很多時候我們group by了以后,還想要查詢結果中包含group by之外的字段(一般情況下,我們都不可能將group by 涵蓋所有的字段),我們就可以上面那樣,將查詢后的結果作為子查詢,放在外部查詢的where 子句后,這樣外部查詢是可以select 出其他字段的。

(SQL寫得比較少的朋友可能沒什么感觸啊,但我希望上面那種寫法大家能夠記住,以后一定會遇到類似的情況的)

二、回顧join查詢

join查詢不知道大家在剛學的時候是怎么理解的,反正我當初好像就挺迷迷糊糊的。我覺得join查詢可以簡單理解成這樣:我想要的查詢結果,一張表搞不掂,那我就join另一張表

比如說,現在我有兩張的表:

 

第一張表 

 

第二張表 

 

現在我想知道在7月25號時:每個公眾號的點擊量、公眾號名稱、號主名稱、公眾號的創建日期

  • 顯然,我們會發現一張表搞不掂啊,某些數據要依賴于另一張表才能把數據"完整"展示出來

那join其實就是把兩張表合起來的一個操作: 

 

join其實就是一個合并的操作  

兩張表合并起來以后我們就會發現,這張“大表”就含有這兩張表的所有字段啦,那我想要什么都有了!

值得注意的是:在join的時候,會產生笛卡爾積(至于什么是笛卡爾積我這里就不說了,反正我們要記住的是join表時一定要寫關聯條件去除笛卡爾積)

另外,left join和right join也是我們經常用到,如果我們單純寫join關鍵字,那會被當成是inner join 。下面我簡單解釋一下:

  • 上面說了,在join的時候一定要寫關聯條件,如果是inner join的話,只有符合關聯條件的數據才會存在最大表中
  • 如果是left join的話,即便關聯條件不符合,左邊表的數據一定會存在大表中
  • 如果是right join的話,即便關聯條件不符合,右邊表的數據一定會存在大表中

看下面的圖: 

 

join 

此時我們的兩張表關聯的條件是“公眾號” :如果是inner join,那么最后我們的表只有兩條記錄。如果是left join ,那么最后我們的表有三條數據。如果是right join,那么我們最后的表只有兩條數據

三、回顧case when

SQL中的case when then else end用法其實跟我們程序語言中的if-else很是類似,在寫SQL的時候也常常會用到。

我用得比較多的語法如下:

  1. CASE 
  2. WHEN sex = '1' THEN '男' 
  3. WHEN sex = '2' THEN '女'
  4. ELSE '其他' END 

在when后面可以跟多個表達式,比如說: 

  1. CASE 
  2. WHEN sex = '1' and name ='Java3y' THEN '男' 
  3. WHEN sex = '2' and name ='Java4y' THEN '女'
  4. ELSE '其他' END 

如果要為case when表達式取別名,在end 關鍵字后邊直接加就好了

更多用法詳情參考:

  • https://www.cnblogs.com/prefect/p/5746624.html

四、一些常用的函數

4.1 hive和presto解析json

我這邊會有這種情況:將json數據存到MySQL上。我去網上搜了一下以及問了同事,為什么要將json存到MySQL的字段上時,他們的答復都差不多:

  • 在MySQL存json數據,這樣方便擴展啊。如果那些字段不需要用到索引,改動比較頻繁,你又不想改動表的結構,那可以存json。
  • ps:在MySQL 5.7版本以后支持json類型

參考資料:

  • https://cloud.tencent.com/developer/article/1004449
  • https://www.zhihu.com/question/324674084/answer/685522547

我這邊做報表一般來hive或presto上搞的,所以解析json的也是在那上面。

hive解析json函數: 

  1. get_json_object(param1,'$.param2' 
  2. -- 如果是數組  
  3. get_json_object(xjson,'$.[0].param2' 

presto 對json的處理函數: 

  1. -- 數組 (去除第index個json)  
  2. json_array_get(xjson,index 
  3. -- 單個jsoin對象  
  4. json_extract(xjson,'$.param2' 

參考資料:

  • https://www.cnblogs.com/drjava/p/10536922.html

4.2 時間函數

昨天/近7天/本月按照這種指標來查詢也是非常常見的:

昨天

  1. SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 時間字段名) <= 1 

7天 

  1. SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(時間字段名) 

近30天

  1. SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(時間字段名) 

本月 

  1. SELECT * FROM 表名 WHERE DATE_FORMAT( 時間字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ) 

上一月

  1. SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 時間字段名, '%Y%m' ) ) =1 

在presto中使用時間格式,需要明確寫出關鍵字timestamp,比如:

  1. select supplier,count(id) from xxx_table where sendtime >= timestamp '2019-06-01' 

參考資料:

  • https://blog.csdn.net/cool_easy/article/details/50880949

4.3 其他常用的函數

這里我簡單整理一下我最近用過函數:

  1. length  --計算字符串長度 
  2. concat  --連接兩個字符串 
  3. substring -- 截取字符串 
  4. count   -- 統計數量 
  5. max   -- 最大 
  6. min   -- 最小 
  7. sum   -- 合計 
  8. floor/ceil  --...數學函數 

再來分享一下最近遇到的一個需求,現在有的數據如下:

  1. 【Java3y簡單】快樂學習 
  2. 【Java3y簡單】快樂學習渣渣 
  3. 【Java3y通俗易懂】簡單學 
  4. 【Java3y通俗易懂】簡單學芭芭拉 
  5. 【Java3y平易近人】無聊學 
  6. 【Java3y初學者】枯燥學 
  7. 【Java3y初學者】枯燥學呱呱 
  8. 【Java3y大數據】欣慰學 
  9. 【Java3y學習】巴拉巴拉學 
  10. 【Java3y學習】巴拉巴拉學哈哈 
  11. 【Java3y好】雨女無瓜學 

現在我統計出【】括號里邊出現的頻次,比如說:Java3y通俗易懂出現的頻次是多少。當時一直都沒想到好的思路,都快要搜“SQL 正則表達式 快速入門”了,請教了一下同事,同事很快就寫出來了:

  1. select substring_index(left(title , INSTR(title , '】') -1 ) , '【',-1) FROM `xxx_table` 

哇~,awesome

責任編輯:龐桂玉 來源: Java團長
相關推薦

2021-10-27 17:57:35

設計模式場景

2021-09-23 15:13:02

Spring依賴Java

2023-11-26 17:47:00

數據分析

2017-11-21 15:34:15

Linux 開發開源

2024-04-28 11:22:18

2020-05-13 21:09:10

JavaScript前端技術

2021-08-28 11:47:52

json解析

2022-12-13 08:23:25

CSS前端漸變

2021-04-14 17:34:18

線程安全

2019-12-11 15:21:12

PythonExcel瀏覽器

2021-11-03 06:57:41

Vue源碼應用

2024-01-05 09:13:35

2024-04-15 00:10:00

Redis數據庫

2024-02-28 07:53:30

Redis數據存儲數據庫

2018-05-10 16:02:48

Android程序贈工具

2022-09-30 09:26:35

JavaScript技巧

2021-06-07 14:36:58

iPadSiri辦公

2022-09-25 22:56:52

JavaScrip編程技巧

2024-11-25 09:08:10

Redis高頻應用場景

2025-05-27 07:00:00

AI工具GenAI人工智能
點贊
收藏

51CTO技術棧公眾號

精品无码久久久久久国产| 国产福利91精品| 欧美日韩夫妻久久| 亚洲一区免费看| 荡女精品导航| 亚洲激情综合网| 免费亚洲精品视频| 日本在线视频一区二区三区| 精品久久久免费| 国产成人亚洲综合无码| 中文字幕av一区二区三区人| 欧美一级一区二区| 一级片视频免费观看| 国产精品三上| 久久久久久亚洲精品| 黄色在线视频网站| 综合久久久久综合| 天天做天天爱天天高潮| jizzjizz欧美69巨大| 一区二区三区国产在线观看| 激情小视频在线| 欧美激情综合网| 国产高潮呻吟久久久| 天天综合网网欲色| 久久久久久18| 深夜视频一区二区| 在线播放中文字幕一区| 青青操视频在线| 中文字幕精品一区二区精品绿巨人| 亚洲欧美99| 亚洲视频电影在线| 91国产精品电影| 色香欲www7777综合网| 欧美嫩在线观看| 中文字幕视频免费在线观看| 久久久精品一品道一区| 中文字幕第一页亚洲| 一本久久综合| 99久久一区三区四区免费| 国产96在线亚洲| 精品国产一区av| 欧美xx视频| 日av在线播放| 91麻豆swag| 亚洲第一综合网站| 国产美女久久| 高潮白浆女日韩av免费看| 国产精品一区二区不卡视频| 久久亚洲中文字幕无码| 在线国产一级| 性伦欧美刺激片在线观看| 久久久国产视频91| 手机亚洲第一页| 久久一日本道色综合| 日韩高清dvd| 激情综合电影网| 一区二区三区不卡在线观看| 欧美日韩在线一区二区三区| 国产免费区一区二区三视频免费| 精品大片一区二区| 国产日韩欧美一区二区三区综合| 欧美成人一级视频| 99reav在线| 色婷婷国产精品| 深夜福利在线视频| 欧美日韩精品在线观看| 白虎精品一区| 亚洲第一狼人社区| 亚洲一区在线日韩在线深爱| 亚洲一区在线视频| 一级视频在线免费观看| 亚洲图片有声小说| 在线观看黄色片| 亚洲激情自拍偷拍| 在线国产1区| 色婷婷综合视频在线观看| 成年人在线看| 日韩三区在线观看| av影视在线看| 中文字幕国内精品| 成人高潮a毛片免费观看网站| 久久久欧美精品| 国产精品nxnn| 国产精品久久久久久五月尺 | 久久视频精品| 99在线首页视频| 亚洲一区自拍| 欧美午夜小视频| 亚洲美女精品一区| 水莓100在线视频| 日韩精品一区二区三区在线| 在线免费日韩片| 81精品国产乱码久久久久久| 欧美hentaied在线观看| 国内不卡一区二区三区| 成人sese在线| 在线观看免费视频一区二区三区| 亚洲第一av在线| japanese国产精品| 日本天堂免费a| 色又黄又爽网站www久久| 成人久久网站| 国产精品制服诱惑| 国产精品久久国产精麻豆99网站| a毛片在线看免费观看| 国模私拍视频一区| 日本网站在线观看一区二区三区| 成人网18入口| 亚洲网站视频福利| 在线成人直播| 亚洲 欧美 另类人妖| 日韩欧美国产电影| 国产原创中文在线观看 | 在线成人www免费观看视频| 三级成人黄色影院| 欧美三级午夜理伦三级| 欧美另类videosbestsex日本| 久久久久久**毛片大全| 国精产品一区| 欧美在线视频免费| 国产aⅴ综合色| 一级毛片视频在线| 欧美综合激情网| 成人中文字幕电影| 羞羞视频在线观看不卡| 成人国产精品一区二区| 久久久精品国产免费观看同学| 人妖欧美1区| 1区1区3区4区产品乱码芒果精品| 中文字幕不卡的av| 欧美日韩视频免费观看| 日本一区网站| 色8久久人人97超碰香蕉987| 天堂一区二区三区四区| 色欲色香天天天综合网www| 在线免费观看不卡av| 欧美freesex黑人又粗又大| 中文字幕免费中文| 国产亚洲精品日韩| 日本女优一区| 暧暧视频在线免费观看| 久久精品国产2020观看福利| 中文日韩欧美| 男人的天堂在线视频| 2020国产精品视频| 国产日韩精品一区二区三区| 蜜桃视频在线观看免费视频| 毛片视频免费| 欧美日韩视频免费在线观看| 国产高清精品软男同| 精品国产依人香蕉在线精品| 中文字幕制服丝袜一区二区三区 | 在线色视频网| 亚洲电影网站| 色噜噜狠狠狠综合曰曰曰 | 国产综合18久久久久久| 日韩免费在线观看| 香蕉综合视频| aa在线视频| 日韩av电影免费观看高清| 国产精品久久免费看| 精品日韩欧美| 91精品成人久久| 一道本一区二区三区| 三年中国国语在线播放免费| 日本不卡久久| 福利视频一区二区| 中文字幕亚洲综合久久五月天色无吗'' | 午夜国产一区| 激情小视频在线| 国产99一区视频免费| 亚洲7777| 日韩av在线播放资源| 国产一区福利在线| 国产精品高清乱码在线观看 | 成人久久久久久| 五月激情丁香一区二区三区| 日韩免费在线| 欧美三级黄网| 国产麻豆电影在线观看| 久久韩国免费视频| 亚洲美女免费在线| 欧美极品一区二区三区| 激情网站在线| 欧美黄色一级片视频| 国产精品极品在线| 91 com成人网| 国产成人av电影| 亚洲精品国产动漫| 色多多视频在线观看| 黄色一级片国产| 国内成人精品视频| 欧美自拍丝袜亚洲| 国产成人免费在线观看| www.亚洲一二| 婷婷五月在线视频| 日韩有码免费视频| 精品视频第一区| 美女久久久久久久| 欧美综合一区二区三区|