id 列 (行全体で同じ id が繰り返される) と、各列h1
に,または.h18
blob
par
birdie
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
に,または.h18
blob
par
birdie
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
...)
しかし、それは少し醜くなります。データベースを正規化することをお勧めします。