成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL自定義變量?學不廢不收費~

數據庫 MySQL
今天有機會請到了自定義變量本量來給大家現場說法,咱天就嘮叨嘮叨自定義變量是個啥,是咋工作的。

相信大家對join,where 以及子查詢等等操作已經非常熟悉,在此基礎上如果對于mysql的用戶自定義變量再熟練掌握了,那么對于數據分析來說就又多了一個工具。雖然這個功能不是經常用,但是學來擴展一下自己的知識庫也是好的,免得書到用時方恨少。今天有機會請到了自定義變量本量來給大家現場說法,咱天就嘮叨嘮叨自定義變量是個啥,是咋工作的。

1.自定義變量---自我介紹

大家好,我是mysql自定義變量,和其他的自定義變量一樣,你們可以把我當作一個小盒子,如果想要召喚我只要大喊一聲

set @ver:='x'

就可以召喚出自定義變量本量,順便把x放裝進了盒子。

當然我除了可以裝x,

還可以裝b,心中默念 set @ver:='b' 就可以裝逼成功

如果心情不好我還可以啥也不裝

比如set @ver:=0

如果召喚我請珍惜我,因為我在一次mysql鏈接中有效。

不要以為我只能散裝,把我安裝在生產線上照樣能行。

比如某條sql生產出來一個指標需要存一下,只需要把結果into我就行了,具體操作如下:

select count(1) into @ver from table

想跟裝進去的東西確認眼神么?select @ver,馬上告訴你盒子里現在裝了個啥

我一般不會單獨存在,而是內嵌到sql語句里面作為一個存儲中間變量的容器,如果想知道和我sql語句之間是怎么配合的,就不得不了解一下我的小老弟---sql

2,SQL的自我簡介

大家好,我是SQL,是一種數據庫操作的工具,也是自定義變量的好大哥。如果能配合EXCEL來了解我,就會發現我不是一個慢熱的人。能動手咱就不bb,舉個栗子讓你看一下我們倆有多像

栗子如下:

  1. select 
  2. id 
  3. from 
  4.  
  5. (select id from table1 ) a 
  6.  
  7. join 
  8. (select id from table2) b 
  9. on a.id=b.id 
  10. where a.id>=100 
  11. order by id 

首先我要執行子查詢,也就是把a和b兩個中間表搞出來(ab兩個表可以理解為excle的兩個sheet)

然后我再執行join語句,對兩個表根據id進行笛卡爾乘積,得到兩個表的全部信息(主鍵唯一的情況下可以理解為excel的vlookup)

當然有些信息并不是我們需要的,怎么過濾呢,用where語句(相當于excel的篩選功能)

最終以order by 對最終結果進行排序(對應excel的排序功能)

下面說一點細節可以加深我和自定義標量之間的合作方式

當我select 想要的列時候(select id from table)可以看成是讀取了一列id,也可以看成是一行一行讀取id列,每取一條記錄,游標往下走一格,當遍歷完所有的數據之后再呈現給我們一列id。按照第二種方式相當于是python遍歷數組,中間自然可以加一些變量來存儲一些數據。

有點抽象?舉個例子~

3,舉幾個栗子

某個數據表格記錄了AB兩個店每個小時的營業額,原始數據如下

  1. CREATE TABLE `wk_test` ( 
  2. `datevarchar(20) NOT NULL COMMENT '日期'
  3. `shop` varchar(255) NOT NULL COMMENT '商店'
  4. `hourint(11) NOT NULL COMMENT '小時'
  5. `income` int(11) NOT NULL COMMENT '收入'
  6. PRIMARY KEY (`date`,`shop`,`hour`) 
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8         

 

1.如何觀察每天某個時間點A,B兩個店的分別的累計營業額?

按照上面所說的原理,如果每讀出一條記錄相當于游標往下走一下,我們在遍歷數據的過程中用變量對中間結果進行記錄和判斷,那么就能實現上述需求,代碼如下:

  1. --初始化變量 
  2.  
  3. set @cosum:=0; 
  4.  
  5. set @dates:=''
  6. set @shop:=''
  7.  
  8. select 
  9. date,shop,hour,income, 
  10.  
  11.  
  12.  
  13. @group_income:= 
  14.  
  15. --判斷是否是同一天的同一個商店 
  16.  
  17. case when @dates=a.date and @shop=a.shop 
  18.  
  19. --是一個則累加 
  20.  
  21. then @cosum:=@cosum+income 
  22.  
  23. --不是則將第一個小時的值賦值給累加量 
  24.  
  25. else @cosum:=a.income 
  26.  
  27. end as group_income, 
  28. --保存當前用于判斷的變量 
  29. @dates:=a.date
  30. @shop:=a.shop 
  31. from 
  32. (select * from wk_test order by date,shop,hour) a 

結果如下:


2.用自定義變量實現row_number()over 開窗mysq不支持開窗函數,但是引入自定義變量就能實現相同的效果,具體實現代碼如下:

  1. set @row_number:=0; 
  2. set @dates:=''
  3. set @shop:=''
  4.  
  5. select 
  6. date,shop,hour,income, 
  7. @num:=case when @dates=a.date and @shop=a.shop 
  8. then @row_number:=@row_number+1 
  9. else @row_number:=1 
  10. end as group_income, 
  11.  
  12. @dates:=a.date
  13. @shop:=a.shop 
  14. from 
  15. (select * from wk_test order by date,shop,hour) a 

結果如下:


4,后記:

Mysql的自定義變量是一個不太常用的功能,因為大數據基本上是存儲在hadoop上,操作一般用hive,spark或者impala,他們都自帶一些開窗函數在一定程度上可以取代自定義變量。但是如果懂自定義變量有可能會解決一些不太好解決的問題。

你學廢了么?

 

責任編輯:姜華 來源: 數師兄
相關推薦

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2023-08-18 21:20:37

2016-12-26 15:25:59

Android自定義View

2016-02-26 14:57:50

飛象網

2024-09-02 08:00:00

2016-11-16 21:55:55

源碼分析自定義view androi

2011-06-23 10:49:13

Qt 自定義信號

2022-04-24 15:17:56

鴻蒙操作系統

2013-04-01 14:35:10

Android開發Android自定義x

2021-11-23 15:06:42

Kubernetes 運維開源

2011-12-16 14:23:51

Java

2009-06-08 20:13:36

Eclipse自定義控

2015-01-14 15:06:48

定義相機

2009-07-06 16:59:26

JSP自定義標簽

2015-07-22 10:57:36

watchOS圖表自定義

2013-04-19 10:14:24

2010-09-14 16:47:23

SQL自定義函數

2013-06-27 11:10:01

iOS開發自定義UISlider

2021-12-28 15:38:46

Traefik中間件插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品三区 | 成年免费大片黄在线观看岛国 | 免费一区在线观看 | 久久综合久 | 九九久久国产精品 | 久久国产亚洲 | 亚洲一区二区三区四区五区午夜 | 在线免费国产 | 欧美中文字幕在线观看 | 无人区国产成人久久三区 | 99re在线观看 | 免费视频一区二区 | 日韩毛片视频 | 国产精品久久av | 亚洲激情综合网 | 久久久久久国产精品 | 成人h视频在线 | 日韩在线免费 | 蜜桃一区二区三区在线 | 中文字幕在线免费观看 | 国产精品海角社区在线观看 | 亚洲国产精品区 | m豆传媒在线链接观看 | 草草精品 | 国产视频精品免费 | 日本中文字幕在线观看 | 91亚洲免费 | 国产一级一级毛片 | 亚洲欧美综合精品久久成人 | 欧美日韩精品一区二区 | 精品视频在线免费观看 | 二区在线观看 | 91在线精品一区二区 | 五月婷婷在线视频 | 久久亚洲一区二区 | 久久亚洲精品国产精品紫薇 | 欧美在线视频一区 | 国产乱码精品一区二区三区五月婷 | 一级做a爰片性色毛片视频停止 | 国产精品夜夜春夜夜爽久久电影 | 成人免费一区二区 |