mysql - 选择与 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
如果没有,是否有比上述示例中语句中的一系列子查询更省时的方法?
解决方案
您可以将 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)
推荐阅读
- c# - 使用 htmlbeginform 加载部分视图的视图
- vue.js - 使用 VueJ 在侧边栏中列出大小未知的嵌套对象数组
- python - 文件名中包含空格的 Python FTP 下载文件
- canvas - 转换后将 Konva 标签大小保留在一个组中
- javascript - 使用 firebase (React/Javascript) 创建唯一用户名
- angular - 如何测试这个特定的选择器?
- video - 如何在 Premiere Pro CC 中每 2 秒将一个长片段剪切成多个片段?
- html - 使用交替的文本行制作条纹 div
- python - Geopandas 包含为一个点工作,但不是很多
- html - 需要帮助将图像并排放置