Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में UNION ALL का उपयोग करके विषयवार अंकों को एकल कॉलम में प्रदर्शित करना

MySQL में एकाधिक कॉलम्स (विषयवार अंक) को एकल कॉलम में पंक्तियों के रूप में प्रदर्शित करने के लिए UNION ALL का उपयोग करें। यह "अनपिवट" (unpivot) ऑपरेशन के समान है।

सिंटैक्स

SELECT id, name, 'Subject1' AS subject, subject1_marks AS score FROM table
UNION ALL
SELECT id, name, 'Subject2' AS subject, subject2_marks AS score FROM table
UNION ALL
SELECT id, name, 'Subject3' AS subject, subject3_marks AS score FROM table;

व्यावहारिक उदाहरण

1. टेबल बनाएं और डेटा डालें

mysql> CREATE TABLE DemoTable729 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(100),
    MySQLMarks INT,
    CMarks INT,
    JavaMarks INT
);
Query OK, 0 rows affected (0.40 sec)

mysql> INSERT INTO DemoTable729 (StudentName, MySQLMarks, CMarks, JavaMarks) VALUES 
('Chris', 94, 67, 75),
('Robert', 45, 99, 54),
('David', 57, 89, 43);
Query OK, 3 rows affected (0.15 sec)

2. मूल डेटा (वाइड फॉर्मेट)

mysql> SELECT * FROM DemoTable729;
+-----------+-------------+------------+--------+-----------+
| StudentId | StudentName | MySQLMarks | CMarks | JavaMarks |
+-----------+-------------+------------+--------+-----------+
| 1         | Chris       | 94         | 67     | 75        |
| 2         | Robert      | 45         | 99     | 54        |
| 3         | David       | 57         | 89     | 43        |
+-----------+-------------+------------+--------+-----------+
3 rows in set (0.00 sec)

3. UNION ALL के साथ लॉन्ग फॉर्मेट में परिवर्तित

mysql> SELECT StudentId, StudentName, 'MySQL' AS SubjectName, MySQLMarks AS Score FROM DemoTable729
UNION ALL
SELECT StudentId, StudentName, 'C' AS SubjectName, CMarks AS Score FROM DemoTable729
UNION ALL
SELECT StudentId, StudentName, 'Java' AS SubjectName, JavaMarks AS Score FROM DemoTable729;
+-----------+-------------+-------------+-------+
| StudentId | StudentName | SubjectName | Score |
+-----------+-------------+-------------+-------+
| 1         | Chris       | MySQL       | 94    |
| 2         | Robert      | MySQL       | 45    |
| 3         | David       | MySQL       | 57    |
| 1         | Chris       | C           | 67    |
| 2         | Robert      | C           | 99    |
| 3         | David       | C           | 89    |
| 1         | Chris       | Java        | 75    |
| 2         | Robert      | Java        | 54    |
| 3         | David       | Java        | 43    |
+-----------+-------------+-------------+-------+
9 rows in set (0.00 sec)

UNION vs UNION ALL

ऑपरेटरडुप्लिकेटप्रदर्शनउपयोग
UNIONहटाता है (DISTINCT)धीमा (क्रमबद्ध करता है)अद्वितीय पंक्तियाँ चाहिए
UNION ALLरखता हैतेज़सभी पंक्तियाँ चाहिए (अनपिवट)

अनपिवट के लिए हमेशा UNION ALL उपयोग करें क्योंकि डुप्लिकेट संभव नहीं हैं (विषय नाम अलग हैं)।

MySQL 8.0+ में JSON_ARRAYAGG विकल्प

SELECT StudentId, StudentName,
    JSON_ARRAYAGG(JSON_OBJECT('subject', subj, 'score', scr)) AS marks
FROM (
    SELECT StudentId, StudentName, 'MySQL' AS subj, MySQLMarks AS scr FROM DemoTable729
    UNION ALL
    SELECT StudentId, StudentName, 'C', CMarks FROM DemoTable729
    UNION ALL
    SELECT StudentId, StudentName, 'Java', JavaMarks FROM DemoTable729
) t
GROUP BY StudentId, StudentName;

पिवट (उल्टा ऑपरेशन) के लिए

SELECT StudentId, StudentName,
    MAX(CASE WHEN SubjectName = 'MySQL' THEN Score END) AS MySQLMarks,
    MAX(CASE WHEN SubjectName = 'C' THEN Score END) AS CMarks,
    MAX(CASE WHEN SubjectName = 'Java' THEN Score END) AS JavaMarks
FROM long_format_table
GROUP BY StudentId, StudentName;
  1. - MySQL में IF() से NULL मानों के आधार पर कस्टम टेक्स्ट कैसे दिखाएं?

    MySQL में किसी कॉलम के NULL मानों के आधार पर कस्टम टेक्स्ट प्रदर्शित करने के लिए IF() फंक्शन (या CASE) का उपयोग करें। यह रिपोर्टिंग, UI डिस्प्ले, और डेटा एक्सपोर्ट में Not Found जैसे संदेश दिखाने के लिए उपयोगी है। उदाहरण: StudentName NULL होने पर कस्टम संदेश डेमो टेबल बनाएं: mysql> CREATE TABL

  1. - MySQL में CASE स्टेटमेंट से छात्र अंकों पर कस्टम संदेश कैसे सेट करें?

    MySQL में CASE स्टेटमेंट का उपयोग करके छात्रों के अंकों (Marks) के आधार पर कस्टम परिणाम संदेश (जैसे Good Marks, Not Good Marks) उत्पन्न करें। यह ग्रेडिंग, रिपोर्टिंग, और सशर्त डेटा लेबलिंग के लिए मानक दृष्टिकोण है। उदाहरण: 40 अंक थ्रेशोल्ड पर संदेश डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTabl

  1. - MySQL में GROUP BY DATE से विशिष्ट तारीख वाली पंक्तियां दिखाएं

    DATE() फ़ंक्शन से तारीख भाग के अनुसार समूहित करें डेटाइम कॉलम के केवल तारीख भाग के अनुसार पंक्तियों को समूहित करने के लिए GROUP BY DATE(कॉलम) का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1996 ( ShippingDate datetime, CustomerName varchar(20) ); Query OK, 0 rows affected (