gpt4 book ai didi

mysql - 通过 SQL 获取值分布

转载 作者:行者123 更新时间:2023-11-29 00:12:00 31 4
gpt4 key购买 nike

在 MySQL 数据库中,有一个包含单个数字 value 的表柱子。我想将这些值的分布绘制为条形图。图表中每个条形的宽度应统一,每个条形的高度应反射(reflect)此范围内的条目数。

例如,如果值的范围是从 -10..90并且范围(条)的数量为 10,则图表中的第一个条应显示范围 -10..0 中的条目数最后一个应显示 80..90 范围内的条目数.

有没有比以下更好的计算条形图数据的方法:

  1. 使用 select min(value), max(value) from mytable 获取最小值和最大值
  2. 计算每个范围的上限和下限(在应用程序代码中)
  3. 使用 select count(*) from mytable where value between X and Y 获取每个范围内值的数量

这种简单方法的一个问题是需要发出一个单独的查询来查找每个范围内的值的数量,是否有可能使它更有效,例如通过动态构建查询并使用 GROUP BY

最佳答案

SELECT * FROM my_table;
+----+-----+
| id | val |
+----+-----+
| 1 | 19 |
| 2 | 10 |
| 3 | 6 |
| 4 | 29 |
| 6 | 27 |
| 7 | 20 |
| 8 | 11 |
| 9 | 12 |
| 13 | 16 |
| 14 | 38 |
| 15 | 8 |
| 16 | 22 |
| 17 | 23 |
| 18 | 16 |
| 19 | 20 |
| 20 | 18 |
| 28 | 18 |
| 29 | 7 |
| 30 | 10 |
| 31 | 34 |
| 32 | 11 |
| 33 | 17 |
| 34 | 15 |
| 35 | 12 |
| 36 | 19 |
| 37 | 15 |
| 38 | 18 |
| 39 | 24 |
| 40 | 10 |
| 41 | 19 |
| 42 | 25 |
| 43 | 22 |
| 59 | 27 |
| 60 | 14 |
| 61 | 17 |
| 62 | 25 |
| 63 | 28 |
| 64 | 20 |
| 65 | 10 |
| 66 | 18 |
| 67 | 22 |
| 68 | 12 |
| 69 | 18 |
| 70 | 31 |
| 71 | 22 |
| 72 | 23 |
| 73 | 20 |
| 74 | 12 |
| 75 | 10 |
| 76 | 9 |
| 77 | 21 |
| 78 | 18 |
| 79 | 14 |
| 80 | 17 |
| 81 | 7 |
| 82 | 21 |
| 83 | 11 |
| 84 | 16 |
| 85 | 19 |
| 86 | 30 |
| 87 | 11 |
| 88 | 18 |
| 89 | 26 |
| 90 | 16 |
+----+-----+

SELECT CEILING(((1+val-(SELECT MIN(val) FROM my_table)))/ROUND((SELECT MAX(val)-MIN(val) FROM my_table)/8)) x
, COUNT(*)
, GROUP_CONCAT(LPAD(val,2,0) ORDER BY val) n
FROM my_table
GROUP
BY CEILING(((1+val-(SELECT MIN(val) FROM my_table)))/ROUND((SELECT MAX(val)-MIN(val) FROM my_table)/8));
+------+----------+----------------------------------------------------+
| x | COUNT(*) | n |
+------+----------+----------------------------------------------------+
| 1 | 5 | 06,07,07,08,09 |
| 2 | 13 | 10,10,10,10,10,11,11,11,11,12,12,12,12 |
| 3 | 11 | 14,14,15,15,16,16,16,16,17,17,17 |
| 4 | 17 | 18,18,18,18,18,18,18,19,19,19,19,20,20,20,20,21,21 |
| 5 | 9 | 22,22,22,22,23,23,24,25,25 |
| 6 | 5 | 26,27,27,28,29 |
| 7 | 2 | 30,31 |
| 8 | 1 | 34 |
| 9 | 1 | 38 |
+------+----------+----------------------------------------------------+

关于mysql - 通过 SQL 获取值分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24634974/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com