# Intro to DBMS 2019 HW1 :::danger Please don't ask something TA can find on the first page of Google Search results. If you really have no idea about what the keywords should be typed in search bar, please list the keywords you have tried 請不要在討論區詢問可以在Google Search結果第一頁找到答案的問題,如果你真的不知道要下什麼關鍵字,請列出你嘗試過的關鍵字 ::: :::info Template: Q: `What kind of problem you met?` * `What you have tried` A: `Solution` > `who anser the question (student id)` ::: ### We will use your participation here as a reference of bonus ### 我們將會參考在討論區的活動(回答)來當作加分參考 > (Except for LMGTFY related topics) > (但是 LMGTFY 的不會納入參考) Q0: How to search `something` using Google Search A0: http://bfy.tw/1yH > TA (0756000) --- Q1: 請問match, player_statistic 的table名字有規定是什麼嗎?? A1: 抱歉這邊我們沒有講清楚,table的名字請用回**match**以及**player_statistic**,database的名字則沒有要求,另外欄位名稱也不要隨便換。 > TA > Q1(cont.):請問一定要用match當作table名稱嗎?我用了發現好像是函式名稱,有衝突到 ![](https://i.imgur.com/gyMo7oa.jpg) 改了才沒事 ![](https://i.imgur.com/38XmB6F.jpg) 我的版本是5.7.25,可嗎? A1(cont.): 跟keyword有衝突是有方法解決的,Google的關鍵字為'mysql keyword conflict' ~~我是不是該留點時間讓其他人答~~ > TA > A1:使用 mysql> create table 'match'; 這條指令就可以了 沒加''好像會出問題 > 0513109 > --- Q2: 另外針對一些foreign id 可以做 index 嗎? join 比較快... A2: 當然可以!但你交的sql檔只需要有select的指令就可以了,不用包含建index的指令喔。 > TA --- Q3: 在 player_statistic第2744605筆資料少了winPlacePerc的欄位?我是直接補 0.0 上去 A3: 這個補不補都沒關係,題目裡是沒有用到這筆資料。 > TA --- Q4: 請問每次呼叫mySQL,都是再打ppt給的那兩行指令嗎(start跟connect mySQL那兩行)?因為我第一次跑的時候是成功的,但之後都呼叫不出來有error.. A4: 之後下這行:docker start (你的container name) 再 connect 即可 >0410779 ![](https://i.imgur.com/GQ2Acmj.png) >re Q4 >你可以檢查一下你的container名字,我這邊看你上面是 my-mysql,下面那行是some-mysql,不一樣 --- Q5:請問正常來說要怎麼存取csv檔到table中?我用docker cp csv檔到container底下才抓得到QQ ![](https://i.imgur.com/6lf9VNF.jpg) A5:你是不是還沒把table建好呢?要先建立table才可以匯入! > TA 我有建,名稱檢查起來是對的 A5:下面如果要使用local的話,你必須在連進去MySQL的指令加上-\-local-infile,進去之後使用 SHOW VARIABLES LIKE 'local_infile'; 如果是off,就要 SET GLOBAL local_infile = 1, 才能開啟LOCAL的功能(不然他會說Used command not allowed,連進去記得要加-\-local-infile), BTW:記得use db 和 create table > 0510001 A5: 我也遇到類似的問題。我一開始沒有加local的時候出現--secure-file-priv的error,改了my.cnf檔並重開機,還是無法。後來加了local並確認local_file是on,可是也還是有一樣error 1148的問題。 > 0516218 A5: 剛剛我試了,connect的部分用8.0版的MySQL會有這個問題,5.7版則沒有,正確的連線方式如下 ``` docker run -it --link some-mysql:mysql -v `pwd`:/data --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' ``` 投影片那邊我也更新了 > TA > --- Q6:關於hw1的第三題和第五題,matchType ![](https://i.imgur.com/qzpmzYm.jpg) 比範例答案多出了3個,我實際上去match.csv上面查過了這16個matchType,都是存在的,所以我想請問是typo或者是有可能哪些是不採用的嗎? 不好意思打擾了 A6: 你是對的,我們建table時沒注意好開太短的字串給matchType,導致這邊少了幾項,感謝你的提醒 > TA Q6(cont.):所以正常來說第三題應該是8X2的欄位,第五題是16X2的欄位嗎? A6(cont.):是的,說明文件那邊有更新,你可以重新下載 > TA --- Q7: 小數點位數是否一定要跟簡報一樣 例如: Q4中的avgKills簡報上為整數,如果跑出來是46.000 或是其他題出現浮點數誤差(xx.xxxx0000000001)之類的 會不會影響批改 A7: 上面是寫不會啦(?) ![](https://i.imgur.com/Ceu4cxE.png) >0410740 A7:官方回覆,不會 > TA --- Q8: 我照著網站上這樣打但一直語法錯誤,請問有人知道原因嗎? ![](https://i.imgur.com/r47fbZ1.png) A8:應該是你的match為關鍵保留字,要用特殊打法‵‵ >0510004 A8:每筆資料外沒有加 "",要改成 ENCLOSED BY '' 喔 >0513311 > --- Q9: 想請教一下關於評分的問題, 因為只要繳交 sql query 由助教負責進行測試正確性, 如果我的 query 跑很久 (舉例 2hr) 但是能夠跑出正確答案, 評分的時候是否會等它跑完, 或是會因為跑太久就被砍掉? 還有因為老師還沒教最佳化, query 的執行時間是否會被列入這次作業的評分項目? A9: 因為我們也無法預估到底要讓你們的query跑多久是正常,所以我們應該會採取,設定一個時限(i.e:1小時),如果沒跑完會先顯示time exceeded,然後公布成績後如果有問題,確定自己的query是正確答案的,再來找助教重新跑,這時候時間限制就會加長(因為如果我們每題都要等個一天那永遠測不完),query時間不會納入評分 > TA --- Q10: 想問大家load play_statistic.csv花了多久時間,目前已經跑了兩個小時了還沒處理完畢,有google過(關鍵字: mysql ext4)解決方法並實驗過,但看來速度還是一樣慢。想問一下助教這樣的速度是正常的嗎? A10:我覺得建table的時候可以加入自己的欄位做auto_increment,這樣五分鐘不到,不然我實驗起來他會把你的primary key做排序,可能會花比較多時間 >0410779 A10:可以參考這裡http://www.songyawei.cn/content/2646 我的話是把primary key drop掉之後一分多鐘就可以load完了。 >0516218 A10: 我自己是在matchId, groupId 上做 index 效能會快很多 (你絕對不想要 seq scan 一個百萬筆的 table ). ie: create index idx_matchId on player_statistic(matchId); 這樣做join table 效能會快很多。 > 0410861 --- Q11:請問要交的作業的格式,為q1.sql,檔案內容就是select那些的語法嗎?還是會有query到的答案在裡面,所以q1.sql的存法是直接複製成文檔,再把附檔名改成.sql即可嗎? A11: 只需要繳交query就好 (i.e: select * from test_table),不要把`mysql >`也丟進去,副檔名直接修改就好 > TA --- Q12:想請問player_statistic明明只有六萬多筆資料,可是我的不知道為什麼load到table後有4446966筆資料? A12:原本就有4446966筆唷,猜測你應該是用excel打開的,然後他只顯示65536筆吧? 可以用`wc -l <file_name>`來查看檔案有多少行 > TA --- Q13:請問bonus 的發想的sql是建立在這次提供的資料主題嗎? 還是是要自己想其他主題想像其他資料來發揮? A13:用這份dataset >TA --- Q14: 請問在使用LOAD DATA INFILE時遇到--secure-file-priv錯誤該怎麼解決? GOOGLE搜尋的解法大部分都是針對安裝好的MYSQL(說要修改某個inf檔案) 也試著加過LOCAL選項但還是噴錯(說這個version不能用) 有按照上面的LOCAL解法嘗試過了,但變成語法錯誤 此外也有照著GOOGLE大神作法SHOW VARIABLES LIKE"secure-file-priv",但結果顯示為Empty set。 附上已經嘗試過的操作,此外在一開始是可以用的,但因為VM當掉重開VM後就不能用了 ![](https://i.imgur.com/JemuPpw.png) A14: 之前那個ppt有改過,可用local,不然就嘗試將[mysql]和[mysqld]兩個的secure-file-priv設定為 '' 試試看。 >0410779 A14: 看一下上面別人遇到的問題應該是一樣的,把client的指令改成5.7版本(已經更新在MySQL_installation裡了) > TA A14:(自問自答)版本是5.7沒錯,最後成功的方法是用投影片新的connect指令。因為問題敘述不太一樣所以沒發現其實是同樣的問題我很抱歉QQ (TA:沒事兒沒事兒) A14: 簡單粗暴的解決方法:把檔案丟進 secure-file-priv 的路徑阿 > 0410861 --- Q15:請問第二題的顯示沒有一定順序對嗎? A15:結果長不一樣嗎? > TA reA15:我的第一筆是Id=167c1dbba7cddf,感覺id有按照第一個字去sort,但我的query裡沒有特別下order A15: 沒關係 如果發現大家都錯 答案不一樣之後我們會再做處理XD > TA reA15:所以如果不一樣就是錯嗎qq --- Q16:對於繳交的格式還是不太清楚,我將副檔名改成.sql之後,它又會自動在後面補上.txt(變成q1.sql.txt),請問這樣格式是可以的嗎? A16:請讓windows顯示副檔名 key word: windows file extension > TA --- Q17:我第四題發現第20行雖然都是35.000,但是每次跑第20行的id可能不同,請問是我的問題嗎? ![](https://i.imgur.com/gBdRrXB.png) A17: 因為limit和order by一起用時,每次的排序結果可能會不一樣,剛好有不同ID其殺敵數都為35,所以在第20的筆數可能會不一樣。如果你在意,可以試試加seed,但這部分在給分時不會造成影響~ > TA --- Q18:請問第6題和第8題是不是要等很久才會跑出答案?我等一個多小時都看不到結果,是不是當掉之類的呢?還是我寫錯了? A18:請看上面有同學問過類似問題 > TA Q18:我是想問說這次作業會不會大部分的人都要等這麼久的時間?也就是這樣是不是正常的情況? A18:Query的速度取決於你下的query好不好,越大型的資料庫在進行join的時候跑很久是正常的,如果想分析你query的話,可以用explain這個指令查看詳細的執行計劃。另外,也有一些方法可以加速query的執行,要用google找到這些方法並不難,而且之前也有同學提過。 > TA --- Q19:請問第八題平均名次是指同隊的平均名次後再與開車擊殺數一樣的隊伍名次平均後的值嗎?不太懂題意 A19: 因為同一隊伍在同一場比賽的名次會相同,所以把開車擊殺數一樣的隊伍他們的名次進行平均即可。例如總共有8個隊伍他們的開車擊殺數都同為10,那麼在開車擊殺數為10的平均名次即是該8個隊伍的平均名次。 > TA > --- Q20:請問第六題是指每一場比賽裡移動最大距離的人來算嗎?因為他好像沒說是要用最大還是平均還是總和之類的,我用結果來看是要用最大? A20: 題目好像有寫`並按合計距離由大至小排列` > 0611262 Q20:是指每場比賽的最大還是全部的比賽的最大? A20:曾經有在同一場比賽中有走過路、游過泳及乘過載具的玩家中,他們在他們比過的所有比賽中的這三個距離相加。例如,`走路距離`為該玩家在所有比賽中走路距離和,而`游泳距離`和`乘載具距離`同樣以此類推。而`合計距離`為前面三項距離的和,因此同一個玩家只會有一個`走路距離`、`游泳距離`、`乘載具距離`及`合計距離`,再根據這個`合計距離`由大到小做排序 > TA Q20:一個玩家只有一場比賽(matchId)的比賽id嗎?而不是一個玩家有很多個matchId? A20: 一個玩家可能會有多個matchId,但在這個資料中,一個玩家(Id)只有一場比賽(matchId)的比賽id(修改) > TA A20:我是出這題的助教,這題其實跟matchId完全沒有關係,不要想得太複雜,題目的意思是要你在player_statistic裡,從每一筆資料(每一筆代表一個玩家在一場比賽裡的數據)中找出有走路、有開車、有游泳的那些資料,把這三個數據加起來就是totalDistance,然後按照這個totalDistance作排序列出頭10筆資料。 > TA --- Q21:想請問一下匯資料一直無法全部匯進去要怎麼辦?(跑出warning) ![](https://i.imgur.com/ELePzO8.png) A21: key word `mysql show warning` > TA --- Q22: 請問player_statistic那個表中Id是unique的嗎?看上面Q20助教的意思應該是不unique,不過我自己測出來是沒有重複的? A22: 經過測試確實是發現Id是unique的,但不影響題目的做答,謝謝同學提醒 > TA --- Q23:不好意思我知道上面有人問過類似的問題,但我還是不太清楚繳交的sql檔案內容是在use database之後在每題的操作嗎?也就是每一題要用的特殊的select內容嗎? 結尾的;符號要不要在檔案裡? 大小寫有規定嗎? A23:我也看不懂你指的特殊的select內容是什麼,use database不用寫,因為你不會知道助教的環境長怎樣,結尾的符號是需要的,大小寫你可以自己試看看有沒有差別 > TA Q23:就是只要每題有自己的selct指令就好,不需要像create table、load infile之類的指令? A23: 對的。這次作業不需要交create table、load infile的指令哦~ > TA --- Q24:請問我嘗試執行sql檔案時為甚麼他找不到檔案? ![](https://i.imgur.com/dEPXr9q.png) A24:估計你是在docker外建立的,你可以想像docker是一台小的VM,檔案是分開的,所以在client連進去的指令得用volume把外面的檔案弄進去,可以用同樣的方法`system ls <path>`來看檔案有沒有在docker裡面 keywords: docker volume Q24:那我可以直接把sql檔案裡的全部內容複製貼上到終端機上執行,終端機上顯示的答案正確就就好嗎? A24:正常狀況是。但如果你多複製了東西 或者把好幾題放在同一個檔案裡面就會算錯 --- Q25:請問我第一題的query跑兩個小時還沒跑出來是正常的嗎?還是我有什麼步驟沒做或做錯的嗎?如果不是的話應該怎麼解決呢? ![](https://i.imgur.com/ABUy0Wu.png) A25: 你的matchID 應該改成 matchId 除非你有自己改動欄位名字(?) 此外,因為你用到join,表格欄位很多資料量又很大,join起來會超久,(我的經驗應該是不需要join到match那個表~) > 0616328 --- Q26:我遇到的問題是當我要load csv檔到table的時候,我打LOAD DATA LOCAL INFILE '/home/my_name/match.csv' into ...(略),結果出現File not found (Errcode: 2),我查了很多資料,我沒有檔案路徑有"\\"的問題,有想過可能是csv檔存放的 位置不對,但是網路上所提供的path在我的VM裡都沒有。 A26: 後面的檔案路徑應該要用'./data/match.csv',如果是按照助教給的PPT安裝的,可以嘗試使用PPT最後一頁的system ls data/和system head data/match.csv檢查檔案資料有沒有在正確的路徑上。 >0510007 re:A26:我試過'./data/match.csv'但還是一樣(PS:已經成功了)。 ![](https://i.imgur.com/X5HRaij.png) A26:同學可以麻煩你把`system ls /data/`的結果貼上來嗎?(因為那行指令就是在列出檔案) > TA --- Q27:助教好,第四題的描述中比賽小組數目的attribute是寫numGroup,但match.csv的atrribute叫做numGroups,請問是不是題目打錯了。 A27:同學好,是題目中attribute的提示是少打了s沒錯,實際的attribute名稱要以作業檔案開頭的表格中的attribute名稱為主,謝謝提醒。 > TA ___ Q28: 助教好,不好意思關於作業繳交應該很多人問過了,我想整理一次我看到的意思,確定是否正確。 1、我們要把select* from table %%%%%%%的指令存到.txt檔 2、依題號分為q1、q2... 3、再改副檔名為.sql繳交嗎? 感謝qq A28:為什麼不直接在環境底下建一個sql檔,然後source它跑題目,之後再再把它丟到共用資料夾就好啦。 A28: 是這樣沒錯,還有記得你的query結尾要有分號喔! > TA --- Q29: 不要笑我,我還在安裝階段,請問https://docs.google.com/presentation/d/15OLMXRafgVmNpk1dBmxtdL1C5ETjKwHB6dpre7Sq5iw/edit#slide=id.g4d1c4fa744_0_15這個投影片裡的第五頁那些指令要在哪裡打?我已經安裝好VirtualBox的Lubuntu了。 A29:去ubuntu裡的terminal輸入投影片中的指令(如何呼叫terminal:ctrl+alt+t) >0516321 --- Q30: 想請問一下data一直load不進去,指令也檢查過沒打錯要怎麼辦? ![](https://i.imgur.com/oCx8jf3.png) A30: '\n' >0616052 --- Q31: 助教好,想問問第七題的matchDuration,似乎一直吃不到 期間把match設成B其他的設成B.matchDuration也是一樣 檢查了幾次名稱看起來也沒打錯 第五題同樣有用到matchDuration跑起來卻是順的 ![](https://images.plurk.com/6pPvgzwBqkCzPpbKSJill4.jpg) A31:你把最後的avg(matchDuration)那邊改成select avg(matchDuration) from `match`試試看。 >0516321 > ~~改過了,還是一樣 問題好像是出在avg前面的matchDuration~~... 我把having改回where就動了 感謝!!(?) >恭喜XD > A31: Having是跟group by 搭配使用的 > TA --- Q32: 助教好,我想請問第八題可以接受的數值誤差為多少,附上我的結果。 (雖然作業前面有說可以接受similar result,但第二筆資料差到6%,因此有這個疑問) ![](https://i.imgur.com/UUEAugn.jpg) A32: 這個問題應該是因為,你做的排序是個人的roadkills下去做group by,也就是你得到的其實是,個人開車擊殺數一樣的人,得到的平均名次,但是這題的題目是隊伍的合計開車擊殺數,所以才會出現上面的差距。(btw 8的那欄是剛好對的) > 0510001 > re32: 歐歐瞭解了,感謝你詳細的說明xD!原來一切都是巧合 > ___ Q33:想請問第7題的heals是把所有符合該條件的玩家heals值做加總嗎? A33:題目:他們的最大醫療用品使用量(heals) 因此是取符合條件者的`MAX(heals)`唷~ >0513109 --- Q34:不好意思再確認一些事 第7題的winPlaceperc中第一名就是指值為1嘛? 還有 第8題的題意 請問是利用groupId相同且符合matchType者為一對 再去做roadkills的加總 再利用一樣的teamRoadKills群組去做avgwinPlacePerc嗎? 謝謝 A34:一開始dataset說明的地方有寫: winPlacePerc: This is a percentile winning placement, where 1 corresponds to 1st place...... 所以第一名就是指winPlacePerc為1 >0616097 --- Q35:請問是否可以先將player_statistic和match這兩個table的資料拉部分出來另建一個table,然後才下SELECT指令呢? ex. CREATE TABLE TEST SELECT * FROM player_statistic; SELECT...... >0510021 A35:**不行**,我們測試時會用match跟player_statistic這兩個table跑你們的sql檔,你這樣的話會跑不出任何東西,而且這樣也違背了作業的初衷。 >TA --- Q36:我知道前面有問過了,但還是不確定第二題如果順序不一樣會扣分嗎? A36:不會 > TA > --- Q37:請問ERROR 2003 (HY000): Can't connect to MySQL server on 172.***.***.***是為什麼呢?我start mysql server 可以成功,可是我要Connect to mysql server的時候他好像會time out(進去一下就跳出來) 請問我要怎麼處理這個問題呢? 有真的在跑,可是好像有時間限制,過一陣子就會關掉。 >0616055 A37:https://www.tecmint.com/fix-error-2003-hy000-cant-connect-to-mysql-server-on-127-0-0-1-111/ 請問有嘗試過類似的處理方式了嗎? >0513109 A37:試試在command line打`docker container ls -a`看看server有沒有真的在跑 >TA ___ Q38:請問create table是要怎樣?我這樣寫為何會跑出這個error message?![](https://i.imgur.com/LDcSLAJ.png) A38:請你先看過上面,別人問過一樣的問題,還有同學發問態度好一點 > TA Q38:我上面已經看過了,我是有加' ',但還是一樣的訊息,不管我改成大寫小寫,或是char改成varchar,或是在後面加not null,error都是說create table之後的那串有問題。 A38:請用鍵盤左上角的\` 而不是單引號' > TA > ___ Q39:請問load完data之後skipped和warning的數字都非常大是正常的嗎? A39: SHOW WARNINGS\G; >0410766 --- Q40:想請問一下在建第二個table的時候,為麼麼會跑出這個error messag呢?有看到Q3也遇到類似的問題,可是不知道怎麼解決。 謝謝! ![](https://i.imgur.com/NJs05OX.png) A40:我是下載ultraedit 來編輯 然後在2744606那列數據補0.0(因為不算第1個) >0616234 --- Q41:請問一下CREATE TABLE那邊有加CHARACTER SET UTF8和沒加有什麽差別? A41:可以顯示中文字的差別 但是這次作業的資料內容沒有中文 所以看不出來 > TA > 謝謝! > 0616102 --- Q42:請問這種情況應該怎麽辦呢?網上是說要修改my.cnf但是我找不到參數去修改 ![](https://i.imgur.com/DUh0EaR.png) A42:同學你的環境是怎麼建立起來的?是用docker還是直接裝,我猜測應該是硬碟空間滿了 > TA > > Re42:是用docker建立的 > 在指令列輸入df -h看空間是不是用滿了(or貼上截圖) --- Q43: 請問一下大家第八題的答案前兩欄有超過四位小數嗎?我的會變成 +------+---------------------+ | SR | AVG(winPlacePerc) | +------+---------------------+ | 8 | 0.50605 | | 7 | 0.6411000000000001 | A43: 我的有喔 >0410766 > A43:記得設定欄位名稱可以用 select XXXX as avgWinPlacePerc...唷~ 不知道助教們會不會扣這個的分數,還是建議用範例輸出的格式。 關鍵字 truncate(someNumber,n)也可以取小數到小數點後n位,只是是截斷,剛剛查使用手冊看到了。感謝同學回覆~ >0513109 > A43: 關鍵字 round(someNumber,n) 可以取小數到小數點後n位 >0411306 A43:同學不用在意小數後幾位,這只是助教懶得寫全部小數位上去,規格那邊也有說不用管精準度,不要差非常多就好 >TA --- Q44:助教您好,請問第七題的example output兩格都是空白的,是都是0的意思嗎? >0616071 A44:不是 因為只有一行結果 如果給值你們可以抄上去就好了XD --- Q45:請問助教,為什麼import table的時候有加"NOT NULL" 跟 "PRIMARY KEY (Id)"會跑兩個小時都沒建好,沒加這些就可以在十分鐘內建好?所以請問應該要加嗎?會影響到評分嗎? > 0616098 A45:不會影響到評分 > TA