首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL - bucket整数列并对每个bucket进行计数

SQL - bucket整数列并对每个bucket进行计数
EN

Stack Overflow用户
提问于 2020-12-14 10:42:08
回答 4查看 83关注 0票数 0

我有一个整数列,如下所示。

代码语言:javascript
复制
ID
---
1
2
3
..
..
99
100

我想把它分成10行。

代码语言:javascript
复制
100 rows/10 buckets = 10 different buckets 

我想计算每个存储桶中的行数。

代码语言:javascript
复制
id    | total rows
----------------
1-10  | 10
11-20 | 10
21-30 | 10
...   | ..
...   | ..
91-100| 10

我正在尝试用Postgresql和MySQL来实现这一点。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-12-14 11:15:48

在mysql中:

代码语言:javascript
复制
select
    concat(min((id-1) div 10) * 10 + 1, '-', min((id-1) div 10) * 10 + 10) 'id',
    count(id) 'total rows'
from yourtable
group by (id-1) div 10

在postgres中:

代码语言:javascript
复制
select
    (min((id-1) / 10) * 10 + 1) || '-' || (min((id-1) / 10) * 10 + 10) as id,
    count(id) as total_rows
from yourtable
group by (id-1) / 10
order by (id-1) / 10
票数 0
EN

Stack Overflow用户

发布于 2020-12-14 10:54:46

您可以按如下方式使用truncate函数:

代码语言:javascript
复制
Select concat(min(id),'-',max(id)) as ids, count(1) as total_rows
  From your_table t
Group by truncate(id-1, -1)   
票数 1
EN

Stack Overflow用户

发布于 2020-12-14 10:52:28

您可以尝试使用case表达式

代码语言:javascript
复制
select case 
        when id between 1 and 10 then '1-10'
        when id between 11 and 20 then '11-20'
        when id between 21 and 30 then '21-30' end as id, count(*) as total_rows
from tablename
group by case 
          when id between 1 and 10 then '1-10'
          when id between 11 and 20 then '11-20'
          when id between 21 and 30 then '21-30' end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65282965

复制
相关文章

相似问题

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