如何命名 SQL 中的行

How to name rows in SQL

我有以下查询:

(SELECT count(ID)/2 FROM people  where Date between '2000' and '2001') 
union
(SELECT count(ID)/3 FROM people where Date between '2002' and '2004') 
union
(SELECT count(ID)/6 FROM people where Date between '2005' and '2010')

数字正确。现在我想给行命名以查看是指哪些人。 到目前为止,我只知道如何给列命名。

编辑:另外我将如何命名新名称所在的列?

只需向子查询添加一列:

select dt_2000_2001 as dt_range, count(id) cnt from people  where date between 2000 and 2001
union all
select dt_2002_2004, count(id) / 2 from people where date between 2002 and 2004 
union all
select dt_2005_2010, count(id) / 5 from people where date between 2005 and 2010

我不相信你真的需要这里 union。如果每年都有行,您可以使用 case 表达式来构建组,并使用 count(distinct) 来计算分母,如下所示:

select
    case when date between 2000 and 2001 then dt_2000_2001
         when date between 2002 and 2004 then dt_2002_2004
         when date between 2005 and 2010 then dt_2005_2010
    end as dt_range,
    count(*) / count(distinct date) cnt
from people
group by dt_range

我建议:

select (case when date between 2000 and 2001 then '2000-2001'
             when date between 2002 and 2004 then '2002-2004'
             when date between 2005 and 2010 then '2005-2010'
        end) as dt_range,
       (count(*) * 1.0 / 
        (case when date between 2000 and 2001 then 1
              when date between 2002 and 2004 then 2
              when date between 2005 and 2010 then 5
         end) 
       ) as value
from people
group by dt_range;

我对你选择的分母有点惊讶。它比费率少一分。我希望该值是完整范围。

假设您有所有年份的数据,您可以将其表示为:

select (case when date between 2000 and 2001 then '2000-2001'
             when date between 2002 and 2004 then '2002-2004'
             when date between 2005 and 2010 then '2005-2010'
        end) as dt_range,
       (count(*) * 1.0 / 
        (max(date) - min(date) + 1)
       ) as value
from people
group by dt_range;