id 列 (行全体で同じ id が繰り返される) と、各列h1に,または.h18blobparbirdie
blob単語,parまたはbirdieが列h1に表示される回数をカウントしたいと思いますh18および 各id.
私は次のようなテーブルで終わりたいです...
id blob par birdie
-- ---- --- ------
1 5 10 3
2 2 15 1
3 8 8 2
どうすればいいですか?
id 列 (行全体で同じ id が繰り返される) と、各列h1に,または.h18blobparbirdie
blob単語,parまたはbirdieが列h1に表示される回数をカウントしたいと思いますh18および 各id.
私は次のようなテーブルで終わりたいです...
id blob par birdie
-- ---- --- ------
1 5 10 3
2 2 15 1
3 8 8 2
どうすればいいですか?
おそらくスキーマをある程度正規化する必要があるように思えますが、現状では次のようになります。
SELECT id,
(h1='blob' )+(h2='blob' )+...+(h18='blob' ) AS blob,
(h1='par' )+(h2='par' )+...+(h18='par' ) AS par,
(h1='birdie')+(h2='birdie')+...+(h18='birdie') AS birdie
FROM my_table
多分あなたもこれを考慮することができます:
select
id,
sum(word='blob') as blob,
sum(word='par') as par,
sum(word='birdie') as birdie
from
(select id, h1 word from words union all
select id, h2 from words union all
select id, h3 from words union all
...) w
group by id
クエリを高速化するために、次のようにサブクエリを記述することもできます。
(select id, h1 word from words where h1 in ('blob', 'par', 'birdie') union all
select id, h2 from words where h2 in ('blob', 'par', 'birdie') union all
...)
しかし、それは少し醜くなります。データベースを正規化することをお勧めします。