SQL Group By函数(列) – 现在无法选择该列

前端之家收集整理的这篇文章主要介绍了SQL Group By函数(列) – 现在无法选择该列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Oracle Express中使用了HR员工架构,我想选择在特定年份雇用的员工.
SELECT hire_date,COUNT(*)
    FROM employees empl
GROUP BY SUBSTR(hire_date,-4)
ORDER BY empl.hire_date;

hire_date列的格式为“1/1/2011”,所以我想将它们分组
通过提取最后四个字符.

问题是,我遇到以下错误

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 1 Column: 7

这不可能吗?

解决方法

如果您仅按其最后四位数进行分组,则无法选择完整的hire_date.想想如果你有两行会发生什么:
hire_date
=========
01/01/2001
02/02/2001

在分组时生成的单行中,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,这对于子串也不会很好).

使用像to_char(hire_date,’YYYY’)或extract(从hire_date开始的年份)这样的东西可能会更好一些.

猜你在找的MsSQL相关文章