Tom 發問時間: 電腦與網際網路程式設計 · 8 年前

有關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 個解答

評分
  • sponge
    Lv 6
    8 年前
    最佳解答

    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值

  • 少了抓戰犯用的SO 跟 LOB 欄位了...

  • Lv 4
    8 年前

    你好 DBA 是不會董業務邏輯的

    你要先解釋 AB R H .......的意義

    我才能寫出來

還有問題?馬上發問,尋求解答。