当需要可视化数据分布时,水平直方图是一种有效的方式。以下是使用SQL创建水平直方图的完整攻略,包含两条实例。
准备数据
在进行水平直方图绘制之前,需要准备数据,下面创建一个示例表:
CREATE TABLE sales (
salesperson varchar(50),
amount decimal(10, 2)
);
INSERT INTO sales(salesperson, amount)
VALUES ('Alice', 100),
('Bob', 200),
('Charlie', 150),
('David', 75),
('Ella', 300),
('Frank', 90),
('Grace', 100),
('Helen', 120),
('Ivan', 350),
('Judy', 85);
上面的表包括了销售人员的名称和销售额数据。
绘制水平直方图
接下来,通过以下步骤制作一个水平直方图。
步骤 1:数据分组
首先,需要根据一定的条件(例如销售额区间)计算每个组的频率。
下面的语句将会把数据按照销售额区间划分,计算出每个区间的 salesperson 人数。
SELECT
CONCAT(CAST((amount / 100) AS INT) * 100, '-', CAST((amount / 100) AS INT) * 100 + 99) AS amount_range,
COUNT(salesperson) AS frequency
FROM sales
GROUP BY amount_range;
结果如下:
| amount_range | frequency |
|--------------|-----------|
| 0-99 | 2 |
| 100-199 | 3 |
| 200-299 | 2 |
| 300-399 | 2 |
这就是分组后的数据。
步骤 2:水平直方图绘制
现在再来看看如何绘制水平直方图。可以使用下面的语句来创建水平直方图:
SELECT
amount_range,
CONCAT(REPEAT(' ', 10 - LENGTH(amount_range)), amount_range, ' |', REPEAT('*', frequency / 2))) AS histogram
FROM
(
SELECT
CONCAT(CAST((amount / 100) AS INT) * 100, '-', CAST((amount / 100) AS INT) * 100 + 99) AS amount_range,
COUNT(salesperson) AS frequency
FROM sales
GROUP BY amount_range
) AS bin
ORDER BY amount_range;
上面的语句将会绘制一个水平直方图,输出的结果如下:
| amount_range | histogram |
|--------------|----------------|
| 0-99 | 0-99 |* |
| 100-199 | 100-199|*** |
| 200-299 | 200-299|** |
| 300-399 | 300-399|** |
这里采用重复星号来表示每个组的频率。在这个示例中,frequency / 2 将是每个区间中星号的数量。如果需要调整宽度,请修改 REPEAT('*',frequency / 2) 中的数字。
另一种实例
除了上面的实例,通过下面的步骤,也可以绘制一个水平直方图。
步骤 1:数据分组
首先,需要根据一定的条件(例如月份)计算每个组的频率。
下面的语句将会把数据按照月份划分,计算出每个月的订单数。
SELECT
LEFT(order_date, 7) AS month,
COUNT(*) AS frequency
FROM orders
GROUP BY month;
结果如下:
| month | frequency |
|-----------|-----------|
| 2019-01 | 10 |
| 2019-02 | 15 |
| 2019-03 | 12 |
| 2019-04 | 8 |
| 2019-05 | 7 |
步骤 2:水平直方图绘制
现在,可以使用下面的语句绘制水平直方图:
SELECT
month,
CONCAT(month, ' |', REPEAT('*', frequency))) AS histogram
FROM
(
SELECT
LEFT(order_date, 7) AS month,
COUNT(*) AS frequency
FROM orders
GROUP BY month
) AS bin
ORDER BY month;
这里使用的是重复星号来表示每个月的订单数。输出的结果如下:
| month | histogram |
|-----------|--------------|
| 2019-01 | 2019-01 |********** |
| 2019-02 | 2019-02 |*************** |
| 2019-03 | 2019-03 |************ |
| 2019-04 | 2019-04 |******** |
| 2019-05 | 2019-05 |******* |
这里使用的是重复星号来表示每个月的订单数。在这个示例中,frequency 将是每个区间中星号的数量。如果需要调整宽度,请修改 REPEAT('*',frequency) 中的数字。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 创建水平直方图 - Python技术站