我有一个表,它有一个自动递增的数字主元。我正在尝试获取与按主键增量分组的条件相匹配的行数。鉴于这些数据:
| 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'匹配,结果应该是:
| 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语句中的一系列子查询更高效的方法,如上面的示例所示?
发布于 2018-12-31 18:59:34
您可以将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)发布于 2018-12-31 19:02:13
下面的聚合查询应该可以做到这一点:
SELECT CEIL(id/5), COUNT(*)
FROM table
WHERE value = 'a'
GROUP BY CEIL(id/5)https://stackoverflow.com/questions/53990562
复制相似问题