***难题解|select 中的非聚合要在groupby出现
返回顾客名称和相关订单号以及每个订单的总价
https://www.nowcoder.com/practice/4dda66e385c443d8a11570a70807d250
# 3个表直接连接 select cust_name,b.order_num, sum(quantity*item_price) as OrderTotal from Customers a,Orders b,OrderItems c where a.cust_id = b.cust_id and b.order_num=c.order_num group by cust_name,b.order_num #一定要使用select的两个非聚合 A,B order by cust_name,b.order_num; # 使用了聚合函数,则 # https://blog.csdn.net/HQqHQhqqhq/article/details/109330590 # 一个之前一直忽略的点 关于聚合函数和group By 的使用 # select 出现的非聚合的函数 一定要在groupby 中出现 # SQL_ERROR_INFO:“SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列'b.order_num',该列在功能上不依赖于GROUP BY子句的列;这与SQL_mode=only_full_GROUP_BY不兼容” # SQL中只要用到聚合函数就一定要用到group by 吗? # 今天记录一个弱智问题,一直没发现这个问题。 # 答:看情况 # 1、当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行group by # 2、当只做聚集函数查询时候,就不需要进行分组了。 # 举例来说, # SELECT SUM(TABLE.A ) FROM TABLE # 上述SQL不需要使用Group by 进行分组,因为其中没有非聚合字段,所以不用Group by 也可以。 # 如果是SELECT SUM(TABLE.A ),B, FROM TABLE GROUP BY B # 由于B是非聚合字段,则需要使用MAX()或者其他聚合函数并且Group by 才可以正常执行。
SQL错题 文章被收录于专栏
每天学习一遍 刷题刷题 越刷越强!