需要每种值类型的行数

Need count of rows for each value type

我有一个table格式

SID LinkName           
A1  Link1           
A1  Link2           
A2  Link1           
A2  Link2          
A2  Link3         
A3  Link2
A1  Link1
A2  Link2

我需要按以下格式显示每个 link 类型的计数结果

Link1   Link2   Link3                   
 3        4        1

请指教。

编辑: 此外,如果我需要以以下格式显示每个 link 类型的不同计数的结果。像A1 -> Link1出现两次但只需要统计一次

Link1   Link2   Link3                   
 2        3        1
select sum(case when LinkName = 'Link1' then 1 end) as link1,
       sum(case when LinkName = 'Link2' then 1 end) as link2,
       sum(case when LinkName = 'Link3' then 1 end) as link3
from tablename

在MySQL中,你可以这样做:

select sum(linkname = 'link1') as link1,
       sum(linkname = 'link2') as link2,
       sum(linkname = 'link3') as link3
from t;

编辑:

如果你想计算不同 sid:

select count(distinct case when linkname = 'link1' then sid end) as link1,
       count(distinct case when linkname = 'link2' then sid end) as link2,
       count(distinct case when linkname = 'link3' then sid end) as link3
from t;

通常你不会把它们放在列中,而是放在行中:

select LinkName, count(LinkName) as LinkCount
from table group by LinkName

...这将给出:

LinkName | LinkCount
Link1    | 2
Link2    | 3
Link3    | 1

那样的话,如果出现新的 link 类型,也没什么大不了的。那行得通吗,还是必须在列中?如果是这样,您可能正在查看单个计数 (*) 和两个子选择或相当复杂的自连接或某种案例方法。喜欢:

select count(*) as Link1, (select count(*) from table where LinkName='Link2') as Link2...
from table where LinkName='Link1'

...或类似的东西。

select Link1,Link2,Link3
from 
(
 select Id,Rtrim(Ltrim(Name)) as Name
 from Table_1
) src
pivot
(
  count(Id)
for Name in (Link1,Link2,Link3)
) piv;

其中给出:

Link1   Link2   Link3
4        3      1