SQL code
select sum(ns_Success) as ns_Success, sum(ns_Fail) as ns_Fail from ns_Statistics
where ns_TongDao = '123' ORDER BY ns_Time desc
这样写是错误,提示"列名 'ns_Statistics.ns_Time' 在 ORDER BY 子句中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。"
于是我加上GROUP BY 子句,改成
SQL code
select sum(ns_Success) as ns_Success, sum(ns_Fail) as ns_Fail from ns_Statistics
where ns_TongDao = '123' GROUP BY ns_Time ORDER BY ns_Time desc
这样就正确了,但是我已经用了“ns_TongDao = '123' ” ,为什么非要加个“ GROUP BY ns_Time ”才能通过呢?我记得加了GROUP BY 子句之后查询速度会变得很慢,我要实现这句话的功能,如何避免使用GROUP BY 子句呢? 万分感谢。
这个问题第1个回答:
加group by 是以后面的列来进行分组.如果不分组,select sum(ns_Success) as ns_Success, sum(ns_Fail) as ns_Fail from ns_Statistics 得到的只是一行数据.一行数据是不用排序的,所以用不着加 order by
如果你要以 ns_Time ,再以ns_Time 就可行了.
这个问题第2个回答:
你就是sum,要order by有什么意义呢?
这个问题第3个回答:
如果你要以 ns_Time 分组,再以ns_Time 排序就可行了.不过不一定会慢多少.至于你是否得加上分组条件,那要看你的需求.
这个问题第4个回答:
4、聚集函数可以出现在允许包含一个group by字句的select列表中,如果select 语句中没有group by字句,并且select列表中至少包含一个聚集函数,则select列表不能包含有任何简单的列。
例如: select emp_lname,min(emp_no) from employee 为非法语句,因为emp_lname为简单列
5、聚集函数不能被用于select语句的where子句中。
6、order by子句中的列不必出现在select列表中,但如果指明了select distinct,则order by列必须出现在select中,且不能引用未列入from子句中的表中的列。
这几个是刚学sql语句时最容易犯的几个错误。一般来说:聚集函数要个group by连用的,如果用了where子句
这个问题第5个回答:
对哦,一行数据我怎么加上order by,我发傻了。。。。。。谢谢大家。给分