按年龄范围划分的SQL组

Sta*_*tan 7 sql sql-server group-by sql-server-2005

SQL 2005,我有一个列为'ages_c'的表,我需要按年龄范围对记录进行分组.这是我在这个网站上找到的查询,它让我90%,但'group by'是错误的,*无效的列名'age_range'*

 select 
  case
   when age_c <18 then 'Under 18'
   when age_c between 18 and 24 then '18-24'
   when age_c between 25 and 34then '25-34'
 END as age_range, 
 Count(*) as count
 from contacts
 group by age_range
 order by age_range
Run Code Online (Sandbox Code Playgroud)

当我按'age_c'分组和排序时,我的结果是:

  Under 18  1
  18-24 1
  18-24 1
  25-34 1
Run Code Online (Sandbox Code Playgroud)

我想要的是:

 Under 18   1
  18-24 2      
  25-34 1
Run Code Online (Sandbox Code Playgroud)

谢谢.

Joe*_*lli 13

试试这种方式:

 SELECT SUM(CASE WHEN age_c < 18 THEN 1 ELSE 0 END) AS [Under 18],
        SUM(CASE WHEN age_c BETWEEN 18 AND 24 THEN 1 ELSE 0 END) AS [18-24],
        SUM(CASE WHEN age_c BETWEEN 25 AND 34 THEN 1 ELSE 0 END) AS [25-34]
 FROM contacts
Run Code Online (Sandbox Code Playgroud)

  • 谢谢乔...我欣赏简单。 (2认同)

Eri*_*ric 8

group by age_c- age_range不是物理列.更具体地说,这样做:

group by case
   when age_c <18 then 'Under 18'
   when age_c between 18 and 24 then '18-24'
   when age_c between 25 and 34then '25-34'
 END
Run Code Online (Sandbox Code Playgroud)

由于age_range是别名列,所以group by根本不知道它.分组在计算列集之前发生.您可以使用别名order by的唯一子句是,因为这是在计算列集执行的唯一子句.