SQL中的GROUP BY子句是否冗余?
每当我们在SQL(MIN,MAX,AVG等)中使用聚合函数时,我们必须始终GROUP BY所有非聚合列,例如:
SELECT storeid,storename,SUM(revenue),COUNT(*) FROM Sales GROUP BY storeid,storename 当我们在SELECT语句中使用函数或其他计算时,它变得更加突出,因为这也必须复制到GROUP BY子句. SELECT (2 * (x + y)) / z + 1,MyFunction(x,y),SUM(z) FROM AnotherTable GROUP BY (2 * (x + y)) / z + 1,y) 如果我们改变了SELECT语句,我们必须记住对GROUP BY子句进行相同的更改. GROUP BY子句是多余的吗? >如果确实是这样,那么为什么SQL中有一个GROUP BY子句呢? 解决方法
一般来说这是不正确的.例如MySQL不需要这个,而且SQL标准也没有这么说. > Debunking GROUP BY myths
一般也不正确. MySQL(也许其他数据库)也允许在GROUP BY子句中使用列别名: SELECT (2 * (x + y)) / z + 1 AS a,y) AS b,SUM(z) FROM AnotherTable GROUP BY a,b
指定要分组的唯一方法是使用GROUP BY子句.您不一定会从SELECT中提到的列中推断出它.实际上你甚至不必选择GROUP BY中提到的所有列: SELECT MAX(col2) FROM foo GROUP BY col1 HAVING COUNT(*) = 2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |