Вы не можете выбрать полное hire_date
, если вы группируете только по последним четырем цифрам. Подумайте, что произойдет, если у вас есть две строки:
hire_date
=========
01/01/2001
02/02/2001
В строке single , сгенерированной при группировании, каким должен быть hire_date
?
Каждый выбранный столбец должен быть столбцом группировки или столбцом агрегирования. Другими словами, попробуйте:
select substr(hire_date,-4), count(*)
from employees
group by substr(hire_date,-4)
order by empl.hire_date;
Я должен отметить, что функции для отдельных строк плохо масштабируются. Если вы хотите много обрабатывать год, вы должны разбить его на отдельный столбец. Это может значительно улучшить производительность, но мера, не угадай!
И, как уже упоминалось в комментариях, substr
, вероятно, не лучшее решение, так как это может зависеть от локали (например: возможно, что дата будет отформатирована как YYYY-MM-DD
, что не будет хорошо с substring
).
Может быть лучше использовать что-то вроде to_char(hire_date,'YYYY')
или extract (year from hire_date)
, которое должно быть более устойчивым.