首页 > 解决方案 > 选择与 MySQL 中按 Id 增量分组的条件匹配的行数

问题描述

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

| 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   |

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

| count(0) |
|----------|
|    3     |
|    2     |
|    1     |

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

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如果没有,是否有比上述示例中语句中的一系列子查询更省时的方法?

标签: mysqlsqlselect

解决方案


您可以将 ID 除以 5,然后ceil得到结果:

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)

推荐阅读