【问题标题】:group by + counting different column values按 + 计算不同的列值分组
【发布时间】:2015-04-22 09:04:18
【问题描述】:

我有一张带有id, gender, age and favoriteMovie 的简单表格。

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

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

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

数据库是 ms-sql 2008

非常感谢任何建议

【问题讨论】:

  • 哪个sql?微软?甲骨文?哪个版本的 RDBMS?

标签: sql sql-server-2008 group-by


【解决方案1】:

您可以使用 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 

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2022-11-22
      • 1970-01-01
      • 2015-03-06
      • 2017-09-30
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多