MySQL में REVERSE(), RPAD(), REPEAT() का उपयोग करके ऋणात्मक मानों सहित हिस्टोग्राम बनाना
ऋणात्मक मानों को बाईं ओर और धनात्मक मानों को दाईं ओर दिखाने वाला टेक्स्ट-आधारित हिस्टोग्राम बनाने के लिए स्ट्रिंग फ़ंक्शन का चतुराई से उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना
mysql> CREATE TABLE DemoTable632 (
histogramId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
histogramValue INT,
histogramImage TEXT
);
रिकॉर्ड डालना (धनात्मक और ऋणात्मक)
mysql> INSERT INTO DemoTable632(histogramValue) VALUES(2), (3), (-6), (-5);
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable632;
आउटपुट:
+-------------+----------------+----------------+
| histogramId | histogramValue | histogramImage |
+-------------+----------------+----------------+
| 1 | 2 | NULL |
| 2 | 3 | NULL |
| 3 | -6 | NULL |
| 4 | -5 | NULL |
+-------------+----------------+----------------+
4 rows in set (0.00 sec)
हिस्टोग्राम जनरेट करने की क्वेरी
mysql> 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 | ***** |
+-------------+----------------+----------------+
4 rows in set (0.00 sec)
एल्गोरिदम व्याख्या:
धनात्मक मान (2, 3):
IF(histogramValue < 0, -histogramValue, 0)→ 0 (बाएं पैडिंग के लिए)REPEAT('*', 0)→ खाली स्ट्रिंगRPAD('', 100, ' ')→ 100 स्पेसREVERSE(...)→ 100 स्पेस (दाएं पैडिंग बन जाता है)REPEAT('*', histogramValue)→ '**' या '***' (दाएं तारे)- परिणाम: स्पेस फिर तारे (दाईं ओर बार)
ऋणात्मक मान (-6, -5):
IF(histogramValue < 0, -histogramValue, 0)→ 6 या 5 (बाएं बार लंबाई)REPEAT('*', 6)→ '******'RPAD('******', 100, ' ')→ '******' + 94 स्पेसREVERSE(...)→ 94 स्पेस + '******' (बाएं तारे)REPEAT('*', 0)→ खाली (दाएं कुछ नहीं)- परिणाम: तारे फिर स्पेस (बाईं ओर बार)
सुधारित संस्करण (स्केलिंग के साथ)
SELECT histogramId, histogramValue,
CONCAT(
REVERSE(RPAD(REPEAT('*', IF(v < 0, -v * scale, 0)), max_width, ' ')),
REPEAT('*', IF(v < 0, 0, v * scale))
) AS histogramImage
FROM DemoTable632
CROSS JOIN (SELECT 2 AS scale, 50 AS max_width) params
ORDER BY histogramId;
वास्तविक चार्टिंग के लिए
उत्पादन एप्लिकेशन में, डेटा को एप्लिकेशन लेयर (Python/JS/Chart.js) में लाकर उचित विज़ुअलाइज़ेशन लाइब्रेरी का उपयोग करें। SQL-आधारित हिस्टोग्राम केवल त्वरित एडमिन/डीबग दृश्य के लिए उपयुक्त हैं।