【问题标题】:SQL Server: How to make count(*) of Ages groupsSQL Server:如何计算年龄组的计数(*)
【发布时间】:2021-11-19 10:05:50
【问题描述】:

我有一个包含用户的表用户和一个包含他们年龄的年龄列。

Name Age
User1 19
User2 25
User3 75

我想显示他们的年龄并计算它。 但我不想具体计算每个年龄。我想在这样的年龄组中这样做:

Age group Count
<18 5
19-34 2
>75 2

我该怎么做?

【问题讨论】:

  • 您可以使用 CASE 为您需要的每个年龄段获取一个数字,然后按该数字分组。
  • 提示:CASE WHEN AGE &lt; 18 THEN ... WHEN Age &lt; 35 THEN ... ELSE ... END
  • 旁注:将年龄存储在数据库中很愚蠢,您必须每年更新一次

标签: sql sql-server select group-by count


【解决方案1】:
  1. 使用案例陈述对记录进行分类。
  2. 将它们分组并计数

    Select a.AgeGroup, count(*) Count from (
select 
Case when  Age < 19 then '<19' 
     when Age between 19 and 34 then '19-34'
     when  Age > 75 then '>75' end AgeGroup 
from age ) a
group by a.AgeGroup

【讨论】:

  • 我尝试了您的选项,但它会导致 group by statment 出现错误。它说“年龄组”无效
  • 没用?
  • 你能再试一次吗?我更新了
  • 好的。现在让我们让它变得更加困难。假设用户表没有“年龄”列,但有一个日期,例如:(01/03/1995)。如果我不使用列年龄,而是放置一个函数,该函数根据列出生日期给出年龄(例如:当 dbo.FuncGiveAge(Birth_Date)
  • 是的。它会起作用的。如果 dbo.FuncGiveAge 很好,它将 %100
【解决方案2】:

首先,请注意无法从您提供给我们的源数据中获得该问题所需的输出。

第二个间隔在“19-34”和“> 75”之间,这就是我在输出中添加“else”的原因

另一件要提到的事情是在“

条件 ">75" 也会忽略 75 岁的人。

但这是基于您的问题和源数据的答案

select case when age < 18 then '< 18' when age between 19 and 34 then '19-34' when age > 75 then '> 75' else 'else' end age_group,
       count(1)
  from test_data
 group by case when age < 18 then '< 18' when age between 19 and 34 then '19-34' when age > 75 then '> 75' else 'else' end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2020-12-28
    • 2016-03-20
    相关资源
    最近更新 更多