如何基于列值创建MySQL直方图类型bucket
我有下表,我正试图通过MySQL创建直方图样式的存储桶如何基于列值创建MySQL直方图类型bucket,mysql,Mysql,我有下表,我正试图通过MySQL创建直方图样式的存储桶 | Id | Values | | -------- | --------- | | 1 | 5 | | 2 | 7 | | 3 | 9 | | 4 | 11 | | 5 | 15 | | 6 | 31 | | 7 | 32
| Id | Values |
| -------- | --------- |
| 1 | 5 |
| 2 | 7 |
| 3 | 9 |
| 4 | 11 |
| 5 | 15 |
| 6 | 31 |
| 7 | 32 |
| 8 | 43 |
我正在努力实现以下目标:
| bucket | count |
| -------- | --------- |
| 0-9 | 3 |
| 10-19 | 2 |
| 20-29 | 0 |
| 30-39 | 2 |
| 40-49 | 1 |
有人知道我们如何才能以一种干净的方式实现这一点吗?一种可能的方法是为存储桶列表创建一个参考表,然后
将其与您的表左连接。尝试以下步骤
创建一个表bucket\u列表
,例如:
将值插入存储桶列表中
:
创建查询以返回预期结果:
这里有一个问题:MySQL或SQL Server?最好是MySQL,然后请更新您的标记。请告诉我们您的尝试。我对SQL查询比较陌生。我没能做到。
CREATE TABLE bucket_list (
id INT NOT NULL AUTO_INCREMENT,
startno INT,
endno INT,
PRIMARY KEY(id));
INSERT INTO bucket_list (startno, endno)
VALUES
(0, 9),
(10, 19),
(20, 29),
(30, 39),
(40, 49),
(50, 59),
(60, 69),
(70, 79);
SELECT CONCAT(a.startno,'-',a.endno) AS bucket,
SUM(CASE WHEN b.val IS NULL THEN 0 ELSE 1 END) AS COUNT
FROM bucket_list a
LEFT JOIN mytable b ON b.val BETWEEN a.startno AND a.endno
GROUP BY bucket;