近期打算離職,所以開始投簡歷重新找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...