***难题解|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错题 文章被收录于专栏

每天学习一遍 刷题刷题 越刷越强!

全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务