group by + 计算不同的列值

group by + counting different column values

我有一个简单的 table 和 id, gender, age and favoriteMovie

性别列只有男性和女性的值。

我想显示电影列(按电影分组)中的所有电影标题,并在两个单独的列中显示对所选电影投票的男性人数和女性人数。

类似于count(gender = 'male') as male, count(gender = 'female') as female

数据库是 ms-sql 2008

非常感谢任何建议

您可以使用 case 语法(同时将 count 更改为 sum):

   select favoriteMovie as movie, 
          sum(case 
                when gender = 'male' then
                  1
                else
                  0 
              end) as male,
          sum(case 
                when gender = 'female' then
                  1
                else
                  0 
              end) as female
    from MyTable
group by favoriteMovie 

枢轴不是很好,但这对我有用。

declare @t table (id varchar(55),gender varchar(55),age varchar(55),favoriteMovie varchar(55))

insert into @t values(1,'m',16,'star wars')
insert into @t values(2,'f',16,'star trek')
insert into @t values(3,'m',16,'star trek')
insert into @t values(4,'f',16,'star wars')
insert into @t values(5,'m',16,'star wars')

然后查询。

select favoriteMovie, sum([m]) as "m",sum([f]) as "f"
from @t
    pivot 
    (
    count(gender)
    for gender in ([m],[f])
    ) as pt
group by favoriteMovie