MySQL的兩個小問題

2021-07-24 13:36:58 字數 2595 閱讀 8221

近期打算離職,所以開始投簡歷重新找dba的工作,然後**資本打**過來**面試,提了兩個問題,全沒答上來,其實是太久沒用mysql了啊,還有我工作就是不斷去試出來的,反正整理一下啦。

有兩張表:

如上圖a表和b表這樣子,一共有15個同學,想得到學號為1-15的學生的平均分,如果該項沒有成績就為0,怎麼操作?

**面試卡殼了,因為我工作中遇到這個問題我會去試試的嘛,但是一下子問就容易卡殼。來。試一試咯。用outer join是不行的,搜了一下筆記,mysql是不支援full outer join的語法的,可以使用left join 與right join 的union去重的方式來實現。

(select a.`student_no`,

a.`數學`,b.`student_no`,b.`語文`

from a

left join b

on a.student_no=b.student_no)

union

(select a.`student_no`,

a.`數學`,b.`student_no`,b.`語文`

select t2.stuno, (ifnull(t2.`數學`,

0)+ifnull(t2.`語文`,

0))/2

from

((select ifnull(a.`student_no`,b.`student_no`) as stuno ,a.`數學`,b.`student_no`,b.`語文`

from a

left join b

on a.student_no=b.student_no)

union

(select ifnull(b.`student_no`,

a.`student_no`) as stuno,a.`數學`,b.`student_no`,b.`語文`

from a

right join b

on a.student_no=b.student_no)

) t2

order by t2.stuno

不要光知道到case when 語句,ifnull要記得用啊。

有三行0.1,0.2,0.3,如何求1.1*1.2*1.3的值,那時候被誤導了,光去想函式了,問了老師,老師說應該是涉及到行轉列,好久不用,忘記了,來試一試。

c表資料如下

idscore

10.1

20.2

30.3

要行轉列:

要想去掉null,那就group by 吧,額,驗證是用到分組函式就可以,不一定group by,全體的分組。

select

max(case

when id=1

then score end) as fir,

max(case

when id=2

then score end) as sec,

max(case

when id=3

then score end) as thr

from c;

結果:

firsec

thr0.1

0.20.3

然後相乘:

select  fir*sec*thr

from (

select

max(case

when id=1

then score end) as fir,

max(case

when id=2

then score end) as sec,

max(case

when id=3

then score end) as thr

from c

) tm

得到結果0.006000.

兩個小問題

最近實驗室的工作上碰到的兩個小問題,記錄一下。1.yuv顏色空間的gmm 之前用過很多次的在rgb上的混合高斯模型,最近需要對乙個yuv序列使用gmm方法建背景。因為有現成的 所以第乙個出現在腦海中的想法就是用公式把yuv轉成rgb之後,完了再轉回yuv。後來再回頭一想,完全不必要如此,因為gmm完...

兩個C 的小問題

1.拷貝建構函式中的const adsrptplayliststatus adsrptplayliststatus other adsreport other 只有加const後才能正常的賦值 adsrptplayliststatus const adsrptplayliststatus other...

生活中的兩個小問題

看似簡單的問題,如果不小心,很容易掉進陷進裡哦o o 看題吧 第一題 有3個人去投宿,一晚30元.三個人每人掏了10元湊夠30元交給了老闆.後來老闆說今天優惠只要25元就夠了,拿出5元命令服務生退還給他們,服務生偷偷藏起了2元,然後,把剩下的3元錢分給了那三個人,每人分到1元.這樣,一開始每人掏了1...