0

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

どうすればいいですか?

4

2 に答える 2

3

おそらくスキーマをある程度正規化する必要があるように思えますが、現状では次のようになります。

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
于 2013-01-21T22:40:50.050 に答える
0

多分あなたもこれを考慮することができます:

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
 ...)

しかし、それは少し醜くなります。データベースを正規化することをお勧めします。

于 2013-01-21T23:06:26.153 に答える