Есть ли способ написать запрос SQL, который подсчитывает порядки сезона (например, зимы) каждого сезона за определенный промежуток времени (2000 - 2010)? - PullRequest
0 голосов
/ 02 ноября 2019

Очевидно, что вы можете сделать обычный запрос, например, -

SELECT AVG(COUNT (ordernum))
FROM orders
WHERE DATES BETWEEN '2011/02/25' and '2011/02/27' AS 'Winter Season'
GROUP BY ordernum

и, возможно, оператор CASE для названия ваших сезонов. Но в идеале я хотел бы получить следующее:

enter image description here

Логика:

  • Весна - март - июнь
  • Лето с июня по сентябрь
  • Осень сентябрь-декабрь
  • Зима с декабря по март

1 Ответ

0 голосов
/ 02 ноября 2019

Вы, похоже, хотите 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...