快樂SQL做題 - Day10

今天是開學(xué)前的最后一天啦~~ 感覺有點(diǎn)魔幻~總結(jié)一下這個(gè)寒假~去了長沙~生了一次病咙俩,喉嚨失聲講不出話壮锻,但很開心!因?yàn)槭歉類鄣娜艘黄鸨睹遥词股∫灿性谝黄穑_心~然后斷斷續(xù)續(xù)做了十天sql课舍,真的有進(jìn)步誒塌西!我感覺我從一個(gè)只知道最基礎(chǔ)語法的小小白,成長成對這些類型題目都有思路的小白了筝尾!但是還沒有到很棒的地步所以還要繼續(xù)刷題~ 接下來的目標(biāo)是學(xué)會如何使用變量捡需,老實(shí)說每次看到評論題解有變量的做法都被我跳過了,因?yàn)槲矣X得自己看不懂筹淫,但居然又沒有花時(shí)間去學(xué)站辉!這太可惡了,哈哈哈哈哈!饰剥!所以下一個(gè)階段要學(xué)習(xí)變量的用法殊霞,然后刷完所有題目之后,就是要整理一下經(jīng)典類型題和對應(yīng)思路汰蓉,當(dāng)然绷蹲,還有要整理出超難題的思路!好啦顾孽,小目標(biāo)碎碎念結(jié)束祝钢,希望這個(gè)當(dāng)事人可以說到做到awwwww!現(xiàn)在剛好耳機(jī)里是gala的《young for you》若厚,感覺自己好年輕拦英,哈哈哈哈哈~熊熊燃起的年輕奮斗魂~

廢話太多啦,一起來看看今天有什么題目吧~

闖關(guān)開始盹沈!

關(guān)卡1 -產(chǎn)品銷售分析 I

思路:

這道題比較基礎(chǔ)龄章,就是用inner join找出兩個(gè)表共有的,就可以啦~~~

select?p.product_name,?s.year, s.price?from?product?p

inner?join?sales?s

on?s.product_id?=?p.product_id

order?by?s.year

恭喜過關(guān)乞封!進(jìn)入下一關(guān)做裙!


關(guān)卡2 -產(chǎn)品銷售分析 II

思路:

這道題也比較基礎(chǔ)!肃晚!就是要group by product id 然后把同一個(gè)product id的quantity sum起來~~

select?product_id,?sum(quantity)?as?total_quantity?from?sales

group?by?product_id

恭喜過關(guān)锚贱!進(jìn)入下一關(guān)!


關(guān)卡3 -?產(chǎn)品銷售分析 III

思路:

這道題可以用窗口函數(shù)关串,思路是當(dāng)rank()?over?(partition?by?product_id )= 1 , 說明他們是第一次出現(xiàn)拧廊,那我們就篩選出這部分的年份,這樣就可以啦

select?distinct?product_id,?year?as?'first_year',?quantity,?price?

from?(select?*,rank()?over?(partition?by?product_id?order?by?year)as rk from?sales)as?a

where rk =?1

也可以通過group by product_id 然后選min(year)來篩選出第一次購買的年份晋修。

select?distinct?product_id,?year?as?'first_year',?quantity,?price?

from?sales

where(product_id,year)

in?

(select?product_id,min(year)?as?year?

from?sales?

group?by?product_id?)

恭喜過關(guān)吧碾!進(jìn)入下一關(guān)!

關(guān)卡4 -項(xiàng)目員工 I

思路:

這道題的思路是墓卦,group by project_id然后在最開始算avg倦春,記得要加一個(gè)round~

一開始我自作聰明用了round的窗口函數(shù),但是我錯(cuò)了落剪,因?yàn)槟菢拥脑捗恳桓鱡mployee都會有一個(gè)結(jié)果睁本,而不是每一個(gè)項(xiàng)目有一個(gè)結(jié)果,如下圖所示:

所以忠怖,直接用最普通的寫法就可以啦:

select?p.project_id,round(avg(e.experience_years),2)as?average_years?from?project?p

join?employee?e

where?p.employee_id?=?e.employee_id

group?by?project_id

恭喜過關(guān)呢堰!進(jìn)入下一關(guān)!


關(guān)卡5 -?項(xiàng)目員工II

思路:

這道題一開始我做的是直接group by, having, order by, limit凡泣, 但是發(fā)現(xiàn)是錯(cuò)的枉疼,因?yàn)橛胁⒘械那闆r出現(xiàn)皮假!

所以就要再做一個(gè)查詢,讓having?count(employee_id)?=最大值

下次遇到這種求最大的問題往衷,記得要這么做比較保險(xiǎn)噢钞翔!

select?project_id?from?project

group?by?project_id

having?count(employee_id)?= (select?count(employee_id)?from?project

group?by?project_id

order?by?count(employee_id)?desc?limit?1)

恭喜過關(guān)!進(jìn)入下一關(guān)席舍!


關(guān)卡6 -?項(xiàng)目員工 III

思路:

這道題跟上一道題一樣布轿,要考慮并列的情況出現(xiàn),所以我們要再做一層查詢~

我們的思路是来颤,當(dāng) (p.project_id,e.experience_years) 在(select?p.project_id,max(e.experience_years) group by project_id )里面汰扭,說明是我們想要的輸出

值得注意的是,這里不可以單獨(dú)寫 where (experience_year) in (select max(experience_year)) 因?yàn)楦GΓ覀兛吹氖歉鶕?jù)每個(gè)項(xiàng)目分別看的萝毛,所以如過單獨(dú)只有experience year ,就錯(cuò)了滑黔!

select?p.project_id,?e.employee_id

from?project?p?left?join?employee?e

on?p.employee_id?=?e.employee_id

where?(p.project_id,e.experience_years)?in

(select?p.project_id,max(e.experience_years)?from?employee?e

left?join?project?p?on?p.employee_id?=?e.employee_id

group?by?project_id)

恭喜過關(guān)笆包!進(jìn)入下一關(guān)!


關(guān)卡7 - 銷售分析 I

思路:

這道題尋找銷售量最高的消費(fèi)者略荡,思路可以是我們經(jīng)常做的那樣庵佣,先group by seller_id 然后 having sum(price) = (select sum(price) from sales group by seller_id order by sum(price) desc limit 1),?

但也可以用另外一種語句,也就是all 和 any 語句汛兜。

我們先來看看all 和 any的用法:

all:

select * from student where 班級=’01’ and age > all (select age from student where 班級=’02’);

就是說巴粪,查詢出01班中,年齡大于 02班所有人的同學(xué)

相當(dāng)于

select * from student where 班級=’01’ and age > (select max(age) from student where 班級=’02’);

而any:

select * from student where 班級=’01’ and age > any (select age from student where 班級=’02’);

就是說粥谬,查詢出01班中肛根,年齡大于 02班任意一個(gè) 的 同學(xué)

相當(dāng)于

select * from student where 班級=’01’ and age > (select min(age) from student where 班級=’02’);

另外,關(guān)于運(yùn)算符漏策,我們可以參考下面這張圖:

所以派哲,我們這道題要做的就是,用all語句掺喻,篩選出sum(price)? 等于集合中的最大值芭届,那根據(jù)上面這張圖,我們不可以直接 = all()巢寡,而是應(yīng)該>= 喉脖,因?yàn)檫@樣才是選出等于最大值的值~~~~(學(xué)到了R丁)

所以這道題我們就這么寫:

select?seller_id?from?sales?

group?by?seller_id

having?sum(price)?>=?all(select?sum(price)?from?sales?group?by?seller_id?)

恭喜過關(guān)抑月!進(jìn)入下一關(guān)!


關(guān)卡8 -銷售分析 II

思路:

這道題我們可以使用group_concat() 函數(shù)

首先看看group concat是什么:

group_concat()函數(shù)?功能:將group?by產(chǎn)生的同一個(gè)分組中的值連接起來,返回一個(gè)字符串結(jié)果舆蝴。

也就是說谦絮,如果一個(gè)顧客買了S8 和 iphone题诵, group_concat(product_id) 之后就會是“S8,iphone”

所以我們用這個(gè)函數(shù)层皱,先group by product name. 在having里面限制她有s8字段性锭,并且沒有iphone字段,就大功告成啦~

select?s.buyer_id?from?sales?s

join?product?p

on?s.product_id?=?p.product_id

group?by?s.buyer_id

having?group_concat(p.product_name)?like?'%S8%'?and?group_concat(p.product_name)?not?like?'%iPhone%'

恭喜過關(guān)叫胖!

今天學(xué)到的新知識:當(dāng)rank()?over?(partition?by?product_id )= 1 , 說明他們是第一次出現(xiàn)草冈;partition by 分組總行書不變;遇到求最大的問題瓮增,記得要做子查詢更保險(xiǎn)怎棱,因?yàn)橛兄睾系淖畲笾担粀here xxx in 的時(shí)候記得要想清楚xxx的組合绷跑;all 和 any運(yùn)算符拳恋,? >= 的時(shí)候就是求出大于或等于最大值的部分;group_concat()函數(shù)功能是將group?by產(chǎn)生的同一個(gè)分組中的值連接起來,返回一個(gè)字符串結(jié)果砸捏。

真的十天了誒~~谬运!開心~~當(dāng)然,還是要繼續(xù)努力滴垦藏!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梆暖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子膝藕,更是在濱河造成了極大的恐慌式廷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芭挽,死亡現(xiàn)場離奇詭異滑废,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袜爪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蠕趁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辛馆,你說我怎么就攤上這事俺陋。” “怎么了昙篙?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵腊状,是天一觀的道長。 經(jīng)常有香客問我苔可,道長缴挖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任焚辅,我火速辦了婚禮映屋,結(jié)果婚禮上苟鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己棚点,他們只是感情好早处,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘫析,像睡著了一般砌梆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贬循,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天么库,我揣著相機(jī)與錄音,去河邊找鬼甘有。 笑死诉儒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亏掀。 我是一名探鬼主播忱反,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滤愕!你這毒婦竟也來了温算?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤间影,失蹤者是張志新(化名)和其女友劉穎注竿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂贬,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巩割,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了付燥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣谈。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖键科,靈堂內(nèi)的尸體忽然破棺而出闻丑,到底是詐尸還是另有隱情,我是刑警寧澤勋颖,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布嗦嗡,位于F島的核電站,受9級特大地震影響饭玲,放射性物質(zhì)發(fā)生泄漏侥祭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卑硫。 院中可真熱鬧,春花似錦蚕断、人聲如沸欢伏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硝拧。三九已至,卻和暖如春葛假,著一層夾襖步出監(jiān)牢的瞬間障陶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工聊训, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抱究,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓带斑,卻偏偏與公主長得像鼓寺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子勋磕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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