在数据库中分组年龄

时间:2013-06-03 12:33:09

标签: sql database grouping

我设计了我的数据库,一切都很好。在数据库中,我有一个Age列。

其中一项要求是Age必须分为1-12,13-17,18-25,26-35等类别,以便于选择。

我有点难过如何做到这一点?我没有被要求实际实现数据库,只设计了ERD。

我不确定这是否足以让某人回答,所以如果您还需要更多信息,请直接询问。

修改

我被告知,我不必随着时间的推移改变年龄。

2 个答案:

答案 0 :(得分:2)

我认为比向数据添加新列更好的解决方案就是在原始表上定义一个视图:

create view vw_customer as (
    select c.*,
           (case when Age between 1 and 12 then '1-12'
                 when Age between 13 and 17 then '13-17'
                 when Age between 18 and 25 then '18-25'
                 when Age between 26-35 then '26-35'
            end) as AgeGroup
    from c;

另一种替代方案,如果您的数据库支持它,则是计算列。当SQL提供其他替代方案时,似乎没有理由将这些派生数据实际存储在数据中。

答案 1 :(得分:0)

我建议添加另一个名为AgeBracket的列,以尽量减少信息丢失。

然后你可以做两件事之一 1)有一个更新声明(或在插入上执行)...

UPDATE customer 
SET AgeBracket = case when Age<=12 then '1-12' when Age<=17 then '13-17' .... end
WHERE AgeBracket IS NULL
-- alternative approach    
INSERT INTO Customer(Name,Age,AgeBracket) 
VALUES(@Name, @Age, case when @Age<=12 then '1-12' ....end)`

或2)您可以创建一个具有结构MaxAge , AgeBracketLabel的查找表,并将其连接到Age<=MaxAge并引用标签 - 如果/当它变得更复杂或更多信息时,这是有用的括号是必需的