将 TOP 3 放入单独的列中?

Putting TOP 3 into separate columns?

假设有一个 table 列 animals:

-- animal --
   dog
   dog
   dog
   giraffe
   cat
   cat
   mouse
   mouse
   elephant

根据出现次数最多的 TOP 3 动物创建结果集的最佳方法是什么?它有 3 个单独的列,每个动物 1 个。

结果集:

-- animal 1 -- animal 2 -- animal 3 --
   dog         cat         mouse

您可以使用条件聚合:

select max(case when seqnum = 1 then animal end) as animal_1,
       max(case when seqnum = 2 then animal end) as animal_2,
       max(case when seqnum = 3 then animal end) as animal_3       
from (select animal, count(*) as cnt, row_number() over (order by count(*) desc) as seqnum
      from t
      group by animal
     ) a