如何基于列值创建MySQL直方图类型bucket

如何基于列值创建MySQL直方图类型bucket,mysql,Mysql,我有下表,我正试图通过MySQL创建直方图样式的存储桶 | Id | Values | | -------- | --------- | | 1 | 5 | | 2 | 7 | | 3 | 9 | | 4 | 11 | | 5 | 15 | | 6 | 31 | | 7 | 32

我有下表,我正试图通过MySQL创建直方图样式的存储桶

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