Вы, похоже, хотите case
выражение * в качестве клавиши group by
. Я подозреваю, что-то вроде этого:
SELECT YEAR(date),
(CASE WHEN MONTH(date) IN (1, 2, 3) THEN 'WINTER'
WHEN MONTH(date) IN (4, 5, 6) THEN 'SPRING'
WHEN MONTH(date) IN (7, 8, 9) THEN 'SUMMER'
WHEN MONTH(date) IN (10, 11, 12) THEN 'AUTUMN'
END) as season, COUNT(*)
FROM orders
GROUP BY YEAR(date),
(CASE WHEN MONTH(date) IN (1, 2, 3) THEN 'WINTER'
WHEN MONTH(date) IN (4, 5, 6) THEN 'SPRING'
WHEN MONTH(date) IN (7, 8, 9) THEN 'SUMMER'
WHEN MONTH(date) IN (10, 11, 12) THEN 'AUTUMN'
END);
РЕДАКТИРОВАТЬ:
Если вы хотите среднее значение по годам, используйте арифметику:
SELECT (CASE WHEN MONTH(date) IN (1, 2, 3) THEN 'WINTER'
WHEN MONTH(date) IN (4, 5, 6) THEN 'SPRING'
WHEN MONTH(date) IN (7, 8, 9) THEN 'SUMMER'
WHEN MONTH(date) IN (10, 11, 12) THEN 'AUTUMN'
END) as season,
COUNT(*) / COUNT(DISTINCT YEAR(date))
FROM orders
GROUP BY (CASE WHEN MONTH(date) IN (1, 2, 3) THEN 'WINTER'
WHEN MONTH(date) IN (4, 5, 6) THEN 'SPRING'
WHEN MONTH(date) IN (7, 8, 9) THEN 'SUMMER'
WHEN MONTH(date) IN (10, 11, 12) THEN 'AUTUMN'
END);