首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server在范围内查找值

Server在范围内查找值
EN

Stack Overflow用户
提问于 2013-08-21 07:47:41
回答 2查看 3.4K关注 0票数 3

我有一个要求,我必须找到不同年龄组的人数,例如:

代码语言:javascript
复制
0-5      12

6-10     35

11-15    26

16-20    57

20+      120

我正在Server中创建一个存储过程,它将首先创建一个临时表并存储年龄组,就像一列将有0,而另一列将有5等等。然后循环遍历它们,在min和max范围之间找到计数,并将mim-max值存储在另一个临时表中。

还有其他更简单更好的方法来实现这个输出吗?请给我建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-21 07:57:56

也许是SUMCASE

代码语言:javascript
复制
SELECT [0-5]   = SUM(CASE WHEN AGE >= 0 AND AGE <= 5 THEN 1 ELSE 0 END),
       [6-10]  = SUM(CASE WHEN AGE > 5 AND AGE <= 10 THEN 1 ELSE 0 END),
       [11-15] = SUM(CASE WHEN AGE > 10 AND AGE <= 15 THEN 1 ELSE 0 END),
       ....
FROM dbo.Persons

Demo

或者,使用range表,您可以使用LEFT OUTER JOINGROUP BY + COUNT

代码语言:javascript
复制
SELECT r.[From], r.[To], [Count]=COUNT(p.Age)
FROM dbo.Ranges r
LEFT OUTER JOIN dbo.Persons p
   ON p.[Age] >= r.[From] AND  p.[Age] <= r.[To]
GROUP BY r.[From], r.[To]

Demo

票数 6
EN

Stack Overflow用户

发布于 2013-08-21 08:00:44

你的计划基本上是合理的。

拥有一个包含min和max列的范围表是一种很好的方法,

代码语言:javascript
复制
 AgeRange       MinAge      MaxAge
 5 and under    0           5
 6-10           6           10
 ...

但是,与其“循环”,你应该尝试从集合和连接的角度来考虑--即:加入您的数据集。

代码语言:javascript
复制
on data.age between range.minage and range.maxage

并使用group bycount查找结果

一般来说,在数据集中存储年龄是个坏主意。它永远不会准确,而且会逐渐衰败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18351689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档