数据库sql语句多表连接查询+group by分组的使用

其实,在学校的一次课设中就发现了不会多表连接查询+group by分组,这次实在实习中遇到这种问题,不可能混过去了,便解决一下它吧.

问题背景:

今天写sql语句的时候,需要从两个表中查出关联的数据,并且需要分组
第一次写出来的代码如下
select b.ATTR_VALUE_NAME,count(a.*)
from sales_main.opp_info a,attr_value b
where b.STATUS_CD=a.STATUS_CD
group by a.STATUS_CD

报错,说列名无效

百度了好长时间,发现了问题所在

先给出group by的基本用法

group by可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个汇总表
select字句中的列名必须为分组列或列函数.列函数对于group by字句定义的每个组返回一个结果
group by一般和聚合函数一使用才有意义,比如count,sum,avg等,使用group by 的两个要素:
(1)出现在select后面的字段,要么是聚合函数中的,要么是group by中的.
(2)要筛选结果,可以先使用where再用group by或者先用group by再用having

问题主要在于,用group by分组时,select后面的字段要么是聚合函数,要么在group by中,一般都是这的问题.

那么如何解决呢,试了好多办法,join 子查询 having都不行,后来看到一篇帖子,把要查询的字段加上聚合函数就可以了,max或者min都可以

select max(b.attr_value_name) as 商机状态 ,count(*) as 数量
from sales_main.opp_info a,attr_value b
where b.STATUS_CD=a.STATUS_CD
group by a.STATUS_CD

查询成功!

你可能感兴趣的:(数据库)