आप UNION ALL
. का उपयोग करके श्रेणियों की एक सूची बना सकते हैं और LEFT JOIN
इसके साथ:
SELECT CONCAT(IFNULL(ranges.min, '∞'), '-', IFNULL(ranges.max, '∞')) AS `range`, avg(value) AS avg
FROM (
SELECT 0 AS min, 21 AS max UNION ALL
SELECT 21, 34 UNION ALL
SELECT 34, 64 UNION ALL
SELECT 64, NULL
) AS ranges
LEFT JOIN t ON (ranges.min IS NULL OR value >= ranges.min) AND
(ranges.max IS NULL OR value < ranges.max)
GROUP BY ranges.min, ranges.max
ध्यान दें कि उपरोक्त क्वेरी 20.9999
डाल देगी अंदर [0-21)
और 21.0000
अंदर [21-34)
रेंज।