首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字聚合到类中

将数字聚合到类中
EN

Stack Overflow用户
提问于 2017-11-29 02:11:13
回答 2查看 24关注 0票数 0

假设下表:

代码语言:javascript
复制
id    value
-----------
1      3
2      5
3      15
4      18
5      19
6      30

我希望对以下几个组进行分类和统计:

代码语言:javascript
复制
group    amount
---------------
'1-5'      2
'6-10'     0
'11-20'    3
'21-50'    1

我如何在一个查询中做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2017-11-29 02:18:21

在以下情况下,最简单的方法是将组写入案例中:

代码语言:javascript
复制
SELECT grp, count(*)
FROM
(
 SELECT
  CASE
    WHEN value BETWEEN 1 AND 5 THEN '1-5'
    WHEN value BETWEEN 6 AND 10 THEN '6-10'
    ...and so on...
    ELSE '21-50' 
  END as grp
 FROM
  sourcetable
)a
GROUP BY grp

从本质上讲,您是根据值所在的范围将值从一种形式转换为另一种形式,然后对转换后的值进行计数。注意,我在21-50的范围内使用了一个ELSE,假设值永远不会超过50。如果是这样的话,你需要改变范围,否则,从技术上讲,100也将被归入"21-50“

票数 1
EN

Stack Overflow用户

发布于 2017-11-29 02:27:11

另一种方法是使用生成的范围表:

代码语言:javascript
复制
;WITH CTE_Groups AS (
    SELECT 1 AS min, 5 AS max, '1-5' AS grp
    UNION ALL
    SELECT 6 AS min, 10 AS max, '6-10' AS grp
    UNION ALL
    SELECT 11 AS min, 20 AS max, '11-20' AS grp
    UNION ALL
    SELECT 21 AS min, 50 AS max, '21-50' AS grp
)
SELECT
    G.grp,
    COUNT(T.id) AS amount
FROM
    CTE_Groups G
LEFT OUTER JOIN My_Table T ON T.value BETWEEN G.min AND G.max
GROUP BY
    G.grp, G.min
ORDER BY
    G.min
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47538265

复制
相关文章

相似问题

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