在select子句中,order / group by子句中使用的列是否必需?

时间:2015-01-16 03:00:47

标签: mysql sql oracle

Oracle数据库允许以下查询:

select col1 from table order by col2;

select count(col1) from table group by col2;

看来order / group by子句中的列不需要在select子句中。但是,tutorialspoint: SQL - ORDER BY Clause告诉我其他情况。以上只针对Oracle具体吗?

3 个答案:

答案 0 :(得分:3)

教程是完全错误的。

order by可以包含查询对象中的任何列,无论它们是否在选择列表中。

group by走另一条路。选择列表中的任何非聚合列都必须包含在group by

答案 1 :(得分:0)

我不认为GROUP BY中提到的列必须位于SELECT中。但是,如果有GROUP BY,那么SELECT中未汇总的列必须位于GROUP BY中!无论如何,请参阅SQL Fiddle demo here了解MySQL。所以你可以看到它不是特定于Oracle的。

答案 2 :(得分:0)

如果考虑结果的生成顺序,很明显您不需要从查询条件返回的结果中选择相同的列。

就订单而言,首先从表中选择记录,然后按照您在查询中指定的列对它们进行排序,然后您可以选择希望在结果或输出中看到的列或属性。

希望它有所帮助!