其实,在学校的一次课设中就发现了不会多表连接查询+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
查询成功!