我在一个名为" playson "的表中列出了表演者和他们各自使用的乐器。
这些乐器中有各种各样的吉他,如主吉他、节奏吉他和原声吉他。
我想计算不同乐器的数量。例如,列表看起来像这样:
create or replace view instrument_count
as
select distinct instrument from playson
music=# select * from instrument_count;
instrument
-----------------
violin
guitars
lead guitar
synthesizer
percussion
mandolin
flute
rythm guitar
bass
keyboard
drums
banjo
tambourine
saxophone
acoustic guitar
(15 rows)
然而,问题是我想把原声吉他、铅吉他和节奏吉他简单地算作"吉他"(即作为一种独特的乐器)。
所以这个数字应该是12种不同的乐器,因为"guitars"代表了原声、主音和节奏。
我可以在查询期间将这些吉他归类到一个总称下吗?? 我通常会把原声、节奏和主音从统计中排除,但我遇到的问题是,表演者只弹"主吉他",但由于我独特的乐器列表中包括"吉他"而不包括"主吉他",所以他们根本不被认为是在演奏任何乐器。
如果我能创建一个视图,将"吉他"、"主吉他"、"节奏吉他"one_answers"原声吉他"在所有表的所有实例中简单地计数为"吉他",那将会很有用。
我不能更改原始列。我只能使用视图
更新:I have try this:
create or replace view instrument_list
as
select performer, replace(replace(replace(instrument, 'lead guitar', 'guitars'),'rythm guitar' ,'guitars'),'acoustic guitar' ,'guitars' ) as instrument
from playson
;
-- Compute total instruments
create or replace view instrument_count
as
select distinct instrument from instrument_list
这似乎可以解决问题,但它非常混乱。还有什么更有说服力的途径吗?谢谢。
是否可以这样写:
Select distinct case when instrument like '%guitar%' then 'guitar' else instrument end
是你想要的。这里你得到了所有不同的乐器,当其中一个包含弦乐器时,它被简化为吉他。