如何命名 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;
我有以下查询:
(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;