@evgenyt2000

Почему ORACLE SQL не считает агрегатные функции?

Не получается сделать группировку
SELECT MONTH(LESSONDATETIME),YEAR(LESSONDATETIME),COUNT(*)
FROM LESSON
WHERE YEAR(LESSONDATETIME) AND CLASSID=102
GROUP BY MONTH (LESSONDATETIME)
ORDER BY 1
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@evgenyt2000 Автор вопроса
Всем спасибо разобрался
select
to_char(LESSONDATETIME,'MM'),to_char(LESSONDATETIME,'YYYY'),count(LESSONDATETIME)
FROM LESSON
WHERE to_char(LESSONDATETIME,'YYYY')=2017
having
count(LESSONDATETIME) > 0
group by
to_char(LESSONDATETIME,'MM'),to_char(LESSONDATETIME,'YYYY')
order by
to_char(LESSONDATETIME,'MM') asc;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По стандарту SQL при группировке все выбираемые поля должны быть агрегатными функциям или полями, по которым производится группировка.
У вас YEAR(LESSONDATETIME) не подходит ни под то, ни под то условие.
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
WHERE YEAR(LESSONDATETIME)чему равно? Поэтому нужно каждое условие брать в скобки.
SELECT YEAR(LESSONDATETIME), MONTH(LESSONDATETIME), COUNT(*)
FROM LESSON
WHERE (CLASSID = 102)
GROUP BY YEAR(LESSONDATETIME), MONTH(LESSONDATETIME)
HAVING YEAR(LESSONDATETIME) = 2017
ORDER BY 1, 2
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы