【學(xué)習(xí)】mysql學(xué)習(xí)

20190528

一晾嘶、數(shù)據(jù)分析深入淺出

數(shù)據(jù)分析 深入淺出.png

二熟吏、mysql必知必會(huì)

mysql 必知必會(huì).png

三距糖、leecode題庫(kù)

刷leecode數(shù)據(jù)庫(kù)題,涉及的函數(shù)牵寺。
1悍引、IFNULL函數(shù):MySQL控制流函數(shù)之一,它接受兩個(gè)參數(shù)缸剪,如果不是NULL,則返回第一個(gè)參數(shù)东亦。 否則杏节,IFNULL函數(shù)返回第二個(gè)參數(shù),兩個(gè)參數(shù)可以是文字值或表達(dá)式典阵。
如題:
編寫一個(gè) SQL 查詢奋渔,獲取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+

Select
    IFNULL(
      (Select DISTINCT Salary
       from Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary;

2壮啊、聚集函數(shù)不能直接用in匹配
問題:來(lái)刪除 Person 表中所有重復(fù)的電子郵箱嫉鲸,重復(fù)的郵箱里只保留 Id 最小的那個(gè)
錯(cuò)誤寫法:

delete from person where id not in (select min(id) id from person group by email);

正確寫法:

delete from person where id not in (select id from(select min(id) id from person group by email)t);

3、計(jì)算連續(xù)出現(xiàn)數(shù)字的問題
問題:編寫一個(gè) SQL 查詢歹啼,查找所有至少連續(xù)出現(xiàn)三次的數(shù)字玄渗。
標(biāo)準(zhǔn)答案:

select distinct l.Num as 'ConsecutiveNums' from logs l,logs l1,logs l2 where l.Id=l1.Id-1 and l.Id=l2.Id-2 and l.Num=l1.Num and l.Num=l2.Num

還有種更復(fù)雜的聯(lián)結(jié)方式

select  distinct(logs.num)as ConsecutiveNums from logs,(select (id-1)id,num from logs)a,(select (id-2)id,num from logs)b where logs.id=a.id and a.id=b.id and logs.num=a.num and a.num=b.num;

4、case+when的多級(jí)嵌套問題
問題:小美是一所中學(xué)的信息科技老師狸眼,她有一張 seat 座位表藤树,平時(shí)用來(lái)儲(chǔ)存學(xué)生名字和與他們相對(duì)應(yīng)的座位 id。其中縱列的 id 是連續(xù)遞增的拓萌。小美想改變相鄰倆學(xué)生的座位岁钓。你能不能幫她寫一個(gè) SQL query 來(lái)輸出小美想要的結(jié)果呢?
標(biāo)準(zhǔn)答案(直接不進(jìn)行多級(jí)嵌套,而是序列判斷):

SELECT (CASE 
            WHEN MOD(id,2) = 1 AND id = (SELECT COUNT(*) FROM seat) THEN id
            WHEN MOD(id,2) = 1 THEN id+1
            ElSE id-1
        END) AS id, student
FROM seat
ORDER BY id;

錯(cuò)誤答案(想使用多重嵌套屡限,但是嵌套格式不完整)品嚣,無(wú)法執(zhí)行:

select (case 
        when (id mod 2)=1 and id=(select count(*) from seat ) then id
        else  when (id mod 2)=1 then id+1
                 else id-1 end)
        end
             )id,student from seat order by id

錯(cuò)誤答案修正:

select (case 
        when (id mod 2)=1 and id=(select count(*) from seat ) then id
        else    (case when (id mod 2)=1 then id+1
                             else id-1 end)
        end
             )id,student from seat order by id

20190517
開始練習(xí)MySql經(jīng)典50,有一些之前沒涉及的函數(shù)钧大,做一些筆記記錄翰撑。

1、有這樣一組數(shù)據(jù):('01','A'),('01','B'),('02','B'),('02','C')拓型,如何返回字母序列為{A,B}的序列號(hào)额嘿。

方法:限定數(shù)據(jù)域處在目標(biāo)閾中+數(shù)據(jù)域數(shù)目和目標(biāo)閾一致


create table AA(num varchar(6),aname varchar(6));

insert into AA(num,aname) values ('01','A'),('01','B'),('02','B'),('02','C');

select * from AA;

select AA.num from AA where AA.aname in ('A','B') group by AA.num having count(*)=2;

2、mysql的rank排序劣挫。
方法:
A:不可以用rank函數(shù):
賦值排序

select student.*, (@a:=@a+1) from student, (select @a:=0) a;
image.png

按sname列排序(先內(nèi)部排序+賦值排序)

select stt.*,(@a:=@a+1) as rankname 
from (select student.* from student order by sname)stt,(select @a:=0) 
image.png

普通rank:
思路1:score 然后進(jìn)行用(@rank:=@rank+1)進(jìn)行排序册养,再group by score 取min(rank),再聯(lián)立
思路2:a 表 left join a'压固,要求排序項(xiàng)a<a'球拦,再group by并進(jìn)行count(*)計(jì)數(shù),再將非1的count值加上1 即為排名帐我。

dense_rank排序:
思路1:distinct score 然后進(jìn)行用(@rank:=@rank+1)進(jìn)行排序坎炼,再聯(lián)立

partition by排序:
思路1:先分組,再排序拦键,再union一起谣光;
思路2:自聯(lián)結(jié)a和a',聯(lián)結(jié)條件是組類一致并且排序項(xiàng)a<=a'芬为,再group by 排序項(xiàng)萄金,并且count計(jì)算排序項(xiàng)的數(shù)目即為排名(但這個(gè)也只適用普通rank)。

B:可以用rank函數(shù):
按sname列排序

select  student.*,rank() over (order by Sname) st_rank from student;
image.png

按sid媚朦,sname分組氧敢,組內(nèi)按sname排序

select  student.*,rank() over (partition by sid,sname order by Sname) st_rank from student;
image.png

C:涉及到排序,但是不用返回具體排名的問題:
若不能用rank函數(shù)询张,能用limit解決孙乖,盡量用limit解決,不用先計(jì)算排名份氧,如以下問題:
Employee 表包含所有員工信息唯袄,每個(gè)員工有其對(duì)應(yīng)的 Id, salary 和 department Id 。
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
+----+-------+--------+--------------+
Department 表包含公司所有部門的信息蜗帜。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
編寫一個(gè) SQL 查詢越妈,找出每個(gè)部門工資前三高的員工。

select d.name as Department,e.name as Employee,e.Salary 
from employee e,department d
where e.departmentid=d.id 
and ((e.departmentid,e.salary) in 
(select * from(select distinct departmentid,salary from employee where departmentid=1 order by salary desc limit 3)a) 
or
 (e.departmentid,e.salary) in (select * from(select distinct departmentid,salary from employee where departmentid=2 order by salary desc limit 3)b)
)
order by Department asc,salary desc;

或者自聯(lián)結(jié)的方法(以下這種方法不用管部門到底有多少數(shù)目钮糖,因此不會(huì)有很多個(gè)or出現(xiàn))

select d.name as Department,
       e.name as Employee,
       e.Salary 
from employee e 
inner join department d 
on e.departmentid=d.id 
left join employee as e1 
on e.departmentid=e1.departmentid and e.salary<e1.salary 
group by e.departmentid,e.id 
having count(DISTINCT(e1.Salary))<3
order by e.departmentid asc,e.salary desc;

3梅掠、null值排序問題
null值排序默認(rèn)第一酌住,所以針對(duì)有null值的列進(jìn)行排序,需要先排序再聯(lián)結(jié)(left join 保留null值)阎抒。
先聯(lián)結(jié)再排序:

select *, rank()over(partition by cid01.cid order by cid01.score desc)rank01 
from student 
left join 
(select * from sc where sc.cid='01')cid01 on student.sid=cid01.sid;
image.png

先排序再聯(lián)結(jié):

select student.*,cid01.rank01
from student
left join
(select sc.sid,rank()over(partition by sc.cid order by sc.score desc)rank01 from sc where sc.cid='01')cid01
on student.sid=cid01.sid;
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酪我,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子且叁,更是在濱河造成了極大的恐慌都哭,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逞带,死亡現(xiàn)場(chǎng)離奇詭異欺矫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)展氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門穆趴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人遇汞,你說我怎么就攤上這事未妹。” “怎么了空入?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵络它,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我歪赢,道長(zhǎng)化戳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任埋凯,我火速辦了婚禮点楼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘递鹉。我一直安慰自己盟步,他們只是感情好藏斩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布躏结。 她就那樣靜靜地躺著,像睡著了一般狰域。 火紅的嫁衣襯著肌膚如雪媳拴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天兆览,我揣著相機(jī)與錄音屈溉,去河邊找鬼。 笑死抬探,一個(gè)胖子當(dāng)著我的面吹牛子巾,可吹牛的內(nèi)容都是我干的帆赢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼线梗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椰于!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起仪搔,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘾婿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后烤咧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偏陪,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年煮嫌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笛谦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡立膛,死狀恐怖揪罕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宝泵,我是刑警寧澤好啰,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站儿奶,受9級(jí)特大地震影響框往,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闯捎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一椰弊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓤鼻,春花似錦秉版、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至祭犯,卻和暖如春秸妥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沃粗。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工粥惧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人最盅。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓突雪,卻偏偏與公主長(zhǎng)得像起惕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咏删,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 啟動(dòng)mysql: 登陸mysql 查看有哪些數(shù)據(jù)庫(kù) 查看數(shù)據(jù)庫(kù)中有那些表 mysql配置文件 創(chuàng)建數(shù)據(jù)庫(kù) 創(chuàng)建數(shù)據(jù)...
    firewt閱讀 287評(píng)論 0 1
  • 環(huán)境:centos6.9(虛擬機(jī))安裝mysql-community-server 5.7版本 說明:一定要把ce...
    單曲_循環(huán)閱讀 526評(píng)論 0 1
  • 簡(jiǎn)單描述MySQL中疤祭,索引、主鍵饵婆、唯一索引勺馆、聯(lián)合索引的區(qū)別,對(duì)數(shù)據(jù)庫(kù)的性能有什么影響侨核? MySQL索引的基礎(chǔ)和類型...
    架構(gòu)飛毛腿閱讀 223評(píng)論 0 0
  • 最近接觸到mysql的存儲(chǔ)過程草穆,主要用于統(tǒng)計(jì)數(shù)據(jù)。 此外需要記錄存儲(chǔ)過程的執(zhí)行狀態(tài)搓译,異常日志悲柱。MYSQL手冊(cè)描述(...
    說你還是說我閱讀 6,908評(píng)論 0 4
  • 現(xiàn)在,教育孩子的方法多之又多逼庞,網(wǎng)上蛇更,線下,課堂赛糟,專業(yè)的派任,正在學(xué)習(xí)的…… 一次,聽過一位心理老師講到:教育孩子上可以...
    曲曲_0591閱讀 1,780評(píng)論 0 1