MySQL में ROLLUP और ORDER BY परस्पर अनन्य (mutually exclusive) हैं - इन्हें एक साथ उपयोग करना अच्छा अभ्यास नहीं है। लेकिन यदि उपयोग करें तो सारांश पंक्तियां उन पंक्तियों के साथ क्रमबद्ध हो जाती हैं जिनसे वे गणना की गई हैं।
मुख्य समस्या: सॉर्ट ऑर्डर तय करता है कि सारांश पंक्तियां कहां दिखाई देंगी।
उदाहरण - ratelist टेबल:
DESC क्रम (सारांश पंक्ति अंत में):
mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr DESC;
+------+-------+
| sr | PRICE |
+------+-------+
| 5 | 250 |
| 4 | 850 |
| 3 | 1005 |
| 2 | 630 |
| 1 | 502 |
| NULL | 3237 |
+------+-------+
ASC क्रम (सारांश पंक्ति शुरुआत में):
mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr ASC;
+------+-------+
| sr | PRICE |
+------+-------+
| NULL | 3237 |
| 1 | 502 |
| 2 | 630 |
| 3 | 1005 |
| 4 | 850 |
| 5 | 250 |
+------+-------+
सिफारिश:
WITH ROLLUPके साथORDER BYन उपयोग करें- यदि क्रमबद्ध परिणाम चाहिए, तो डेराइव्ड टेबल/CTE में
WITH ROLLUPकरें, फिर बाहरी क्वेरी मेंORDER BY - या एप्लिकेशन लेयर पर सॉर्टिंग करें
MySQL 8.0+ CTE पैटर्न:
WITH rolled AS (
SELECT sr, SUM(Price) AS PRICE FROM ratelist GROUP BY sr WITH ROLLUP
)
SELECT * FROM rolled ORDER BY
CASE WHEN sr IS NULL THEN 1 ELSE 0 END, -- सारांश पंक्ति अंत में
sr;