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
我有一个简单的 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