有關SQL查詢指令的問題
剛看到一篇BBS上的文章
作者 WuSam (藤原豆海) 看板 Baseball
標題 [釣卡好]平常不常打安打的 一發揮就3~4支
時間 Sun Jul 7 21:21:24 2013
───────────────────────────────────────
有人發現大聯盟龜
好像平常安打打不出來
只要一打一場就是4~5支
請問卡好
有沒有哪位選手就是平常不怎麼打安打
只要有發揮的一場就是猛打賞以上
EX:前幾場熄火 下一場3安打起跳 之後又熄火
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.27.235.153
推 birdman2627:第一金剛 周森毅? 07/07 21:23
推 s4618936:黃正偉 07/07 21:24
推 daniel320:骰子王,大頭!! 07/07 21:24
→ waijr:修明打擊不怎樣 但他曾經三響砲 07/07 21:24
推 Willyao:這問題的SQL頗難下 07/07 21:24
推 ryanlei:算標準差 07/07 21:24
→ cucu1126:大頭也常幹這種事 07/07 21:25
推 st900278:樓上上 用join 07/07 21:25
→ hydra6716:兄弟後段棒那幾個幾乎都是這樣 07/07 21:30
--------
看了之後想一下還是不會用SQL查,
像這篇文章所述的這樣的選手
就是假設有個資料庫裡有個資料表,
格式大概像這樣,
Player Date Team AB R H 2B 3B HR RBI BB
C. Gonzales Jul 4,2013 COL 3 1 1 1 0 0 1 0
並有眾多筆這樣的資料,
那要怎麼查
「平常不怎麼打安打
只要有發揮的一場就是猛打賞(3安)以上」
的選手呢?
感謝了,有興趣想請教,以20點答謝
只要看Player Date Team H就可以了
AB是那場比賽的打數,H代表幾安,
sql我只會基本的,所以不太會
但算法用描述的大概不少,例如
「從資料表中,為各個選手H>=3的總場次除以H=0的總場次(r值),然後選前30名,依r值由高到低排序」
改成不一定要單一一個query,能夠做數次有限次queries也行
然後輸出是個表,一欄是名字,一欄是球隊,另一欄是r值
4 個解答
- spongeLv 68 年前最佳解答
SQL 只是查詢用,取得資料後還是應該由 PHP 等語言來運算
不一定要用複雜而難的語法把任務盡量推給 SQL, 請參考在下的解法
假設表名稱為 PlayerDB
首先要認出不同球員,再針對各球員查打擊資料
使用 DISTINCT 保留字如下:
"SELECT DISTINCT `Player` FROM `PlayerDB`"
查出來以後假設存在陣列 $player
再替每個球員抓安打資料:
"SELECT `H` FROM `PlayerDB` WHERE `Player`='".player[i]."'"
註:取出的 H 會重複,端看該球員那天幾支安打
假設資料存在 $hit_data 陣列中;count($hit_data) 就是總場數
設立變數 $H0, $H3 儲存零安打和三支以上安打場數
用迴圈掃過一次 $hit_data 即可算得 $H0, $H3
設立陣列 $result 來儲存運算結果
判斷「大聯盟龜」兩個條件:
(1) 平常不怎麼安打,反映在 $H0/count($hit_data)
(2) 有發揮就是猛打,反映在 $H3/( count($hit_data)-$H0 )
$result[i]=( $H0/count($hit_data) )*( $H3/( count($hit_data)-$H0 ) )
算出所有人的 $result[i], 再看您要排序幾名獲取多少值以上
實作的細節就看您用 PHP 或其他語法
希望這樣的建議對您有幫助!
2013-07-10 15:13:44 補充:
為了滿足輸出需求,再多一個查詢如下:
若 $player[i] 被認為是「大聯盟龜」
"SELECT `Team`, `R` FROM `PlayerDB` WHERE `Player`='".player[i]."'"
從此可得到他所有記錄中的球隊和 R 值
如此就能列出您要的球員、球隊和 R 值輸出
- 8 年前
只要看Player Date Team H就可以了
AB是那場比賽的打數,H代表幾安,
sql我只會基本的,所以不太會
但算法用描述的大概不少,例如
「從資料表中,為各個選手H>=3的總場次除以H=0的總場次(r值),然後選前30名,依r值由高到低排序」
改成不一定要單一一個query,能夠做數次有限次queries也行
然後輸出是個表,一欄是名字,一欄是球隊,另一欄是r值