SQL的GROUP BY错误SELECT SUM(ADMIN_ENTERED)FROM STATEGROUP BY YE

1个回答

  • 错误提示的意思是group部分定义条件过深.事实上在使用having条件时,一定要注意的是不要过多的使用聚合函数的.因为每一个聚合函数的计算都是非常大的,所以这里的错误就是你使用了过多的聚合函数的原因.

    在SQL中存在一个叫子语句嵌套的.如:select * from A wrhere A.p in(select * from B where B.p in (select.))看似这个条件可能无限的写下去,事实上由于这种查询非常的耗时的,所以在SQL中规定是子嵌套不能超出三层.其一般情况下我们采用的都其的处理方式的,避免使用这种子查询嵌套的,如果不得已才使用一个嵌套.因为这种查询太耗内存的!所以我们都是不建议使用的!

    而聚合函数根其十分类似,因为其对所以结果进行一个分筛统计,也是非常耗时的,不建议使用聚合函数的嵌套的!所以这里必须要考虑这个的问题的!

    对于你的问题,我可能理解的不太透彻,但我不明白的是为什么你非要条件压到having上呢?你有没有考虑过top 1这一个参数的使用呢?

    Select top 1 sum(Admin_EnyEred) as maxenyered from state

    group by year_entered

    order by maxenyered Desc

    这种条件中我连having条件都不再使用的!

    使用多重聚合时我也不知道SQL是否让通过,你可以试一下的,但我想应该是有一定的问题的,至少效率也不行!

    Select max(sum(Admin_EnyEred)) as maxenyered from state

    group by year_entered

    从你自己的语句中我看你可能是对having条件不太理解造成的,事实上having条件与where是不同的,很多时间也是无法转化的.只有部分条件是可以转化的,having又称分组依据,也就是分组前对分组进行一个“过滤”筛选的,而不是where条件的对结果集前后都可以筛选的,所以这样的having条件从你的使用上来说根本就是不对的!