สร้าง Histogram Text-based ใน SQL รองรับค่าลบ
ใช้ REPEAT() สร้างดอกจัน, RPAD() เติม Space, REVERSE() กลับด้านสำหรับค่าลบ
ตัวอย่าง: Histogram ด้วยค่าบวกและลบ
CREATE TABLE DemoTable632 (
histogramId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
histogramValue INT,
histogramImage TEXT
);
INSERT INTO DemoTable632(histogramValue) VALUES
(2), (3), (-6), (-5);
Query Histogram:
SELECT
histogramId,
histogramValue,
CONCAT(
REVERSE(RPAD(REPEAT('*', IF(histogramValue < 0, -histogramValue, 0)), 100, ' ')),
REPEAT('*', IF(histogramValue < 0, 0, histogramValue))
) AS histogramImage
FROM DemoTable632
ORDER BY histogramId;
ผลลัพธ์:
+-------------+----------------+----------------+
| histogramId | histogramValue | histogramImage |
+-------------+----------------+----------------+
| 1 | 2 | ** |
| 2 | 3 | *** |
| 3 | -6 | ****** |
| 4 | -5 | ***** |
+-------------+----------------+----------------+
อธิบาย Logic
- ค่าบวก:
REPEAT('*', value)แสดงดอกจันขวา - ค่าลบ:
REPEAT('*', -value)สร้างดอกจัน แล้วRPAD(..., 100, ' ')เติม Space ซ้าย 100 ช่อง,REVERSE()กลับด้าน → ดอกจันอยู่ซ้าย (แสดงค่าลบ) - IF(histogramValue < 0, ...) - แยก Logic ค่าบวก/ลบ
ปรับปรุง: Dynamic Width (ไม่ Hardcode 100)
SELECT
histogramId,
histogramValue,
CONCAT(
REVERSE(RPAD(REPEAT('*', IF(histogramValue < 0, -histogramValue, 0)),
(SELECT MAX(ABS(histogramValue)) FROM DemoTable632), ' ')),
REPEAT('*', IF(histogramValue < 0, 0, histogramValue))
) AS histogramImage
FROM DemoTable632
ORDER BY histogramId;
Histogram แบบแนวตั้ง (Vertical) - Advanced
WITH RECURSIVE nums AS (
SELECT 1 AS n UNION ALL SELECT n+1 FROM nums WHERE n < 10
),
data AS (
SELECT histogramId, histogramValue FROM DemoTable632
)
SELECT
n AS level,
GROUP_CONCAT(
CASE
WHEN histogramValue >= n THEN '*'
WHEN histogramValue <= -n THEN '*'
ELSE ' '
END ORDER BY histogramId SEPARATOR ' '
) AS bars
FROM nums
CROSS JOIN data
GROUP BY n
ORDER BY n DESC;
การใช้งานจริง
- Quick Visualization ใน SQL Client (ไม่ต้อง Export ไป Excel)
- Debug Data Distribution ใน Stored Procedure
- Console/Terminal Report
Alternative: ใช้ Application Layer
สำหรับ Production Dashboard ให้ Query แค่ Aggregate แล้ว Chart ด้วย Chart.js, D3.js, Apache ECharts, หรือ BI Tools (Metabase, Superset, Grafana)