Re: [SQL ] 想找出大聯盟會投相同球路的投手 ?
其實正規化是易於編輯(Insert/Update)不利於查詢
反正規化則相反,是利於查詢,不利於編輯
所以反/正規化是虛實相生,正反相剋(我在說啥?)
端看你應用場合而已
用正規化的資料表可以透過子查詢作反正規化的查詢,
不過資料量大的話效率會很慢(子查詢又加Union的關係)
Select 伸卡球,滑球,變速球........,Count(*)
From (select 投手,Max(伸卡球) as 伸卡球,Max(滑球) as 滑球........
from (select 投手,1 as 伸卡球,0 as 滑球,0 as 變速球...
from Table
where 球路='伸卡球'
union all
select 投手,0 as 伸卡球,1 as 滑球,0 as 變速球...
from Table
where 球路='滑球'
union all
select 投手,0 as 伸卡球,0 as 滑球,1 as 變速球...
from Table
where 球路='變速球'
.......)
group by 投手)
※ 引述《xam (聽說)》之銘言:
: ※ 引述《flakchen (flak)》之銘言:
: : 改一下欄位比較簡單
: : 投手 伸卡球 滑球 變速球 曲球
: : Wang 1 1 1 1
: : Nilson 1 1
: : Santana 1 1
: : Select 伸卡球,滑球,變速球,曲球,投手
: : order By 伸卡球,滑球,變速球,曲球
: : 就是答案1
: : Select 伸卡球,滑球,變速球,曲球,Count(*)
: : Group By 伸卡球,滑球,變速球,曲球
: : 就是答案2
: 原本的 schema 比較接近正規化
: 你這樣反而違反正規化原則吧?
: 這樣設計除了對現在這個問題剛好比較好解以外
: 似乎不太有利
: 不過如果如果情況不會變得太複雜,也是一個解法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.120.12.248
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 5 篇):