首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择与MySQL中按Id增量分组的条件相匹配的行数

选择与MySQL中按Id增量分组的条件相匹配的行数
EN

Stack Overflow用户
提问于 2018-12-31 18:52:39
回答 2查看 372关注 0票数 1

我有一个表,它有一个自动递增的数字主元。我正在尝试获取与按主键增量分组的条件相匹配的行数。鉴于这些数据:

代码语言:javascript
复制
| id | value |
|----|-------|
| 1  |   a   |
| 2  |   b   |
| 3  |   a   |
| 4  |   a   |
| 5  |   b   |
| 6  |   a   |
| 7  |   b   |
| 8  |   a   |
| 9  |   b   |
| 10 |   b   |
| 11 |   a   |
| 12 |   b   |

如果我想知道每5行中有多少行与value = 'a'匹配,结果应该是:

代码语言:javascript
复制
| count(0) |
|----------|
|    3     |
|    2     |
|    1     |

我可以在SELECT语句中嵌套一系列子查询,如下所示:

代码语言:javascript
复制
SELECT (SELECT count(0) 
FROM table 
WHERE value = 'a' 
AND id > 0 
AND id <= 5) AS `1-5`,
(SELECT count(0)
FROM table
WHERE value = 'a'
AND id > 5
AND id <=10) AS `6-10`,
...

但是,是否有一种方法可以通过GROUP BY语句或类似的方法来实现,而不需要手动写出增量呢?如果没有,是否有比SELECT语句中的一系列子查询更高效的方法,如上面的示例所示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-31 18:59:34

您可以将ID除以5,然后对结果进行ceil

代码语言:javascript
复制
SELECT   CONCAT((CEIL(id / 5.0) - 1) * 5, '-', CEIL(id / 5.0) * 5), COUNT(*)
FROM     mytable
WHERE    value = 'a'
GROUP BY CEIL(id / 5.0)
票数 1
EN

Stack Overflow用户

发布于 2018-12-31 19:02:13

下面的聚合查询应该可以做到这一点:

代码语言:javascript
复制
SELECT CEIL(id/5), COUNT(*)
FROM table
WHERE value = 'a'
GROUP BY CEIL(id/5)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53990562

复制
相关文章

相似问题

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