如图,我知道用了group by要用聚合函数才能不报错,但是我这里有多个字段需要显示,求大神解答一下,或者不用group by 查询只要实现按zllb统计 查出结果就可以了(需求是要按zllb查出结果并显示多个字段)
g.hj ,a.gxsj, a.jssj
修改 max(g.hj),max(a.gxsj),max(a.jssj )追问
max我试过了,每次只能现实最多那条数据,其他不显示
追答那你要统计什么啊
如果说你要分组显示全部的话 就不用group by 而是用排序 order by zllb 了
不是排序啊
是按zllb这个类统计啊
追答我知道啊 你要统计什么啊 统计这个 有多少条 还是统计什么? 你的COUNT(*) 表示统计多少条 这个就很好理解
g.hj ,a.gxsj, a.jssj 这些你又是统计什么? 要知道 zllb 现在代表的不是一条数据 而是一群 你一群怎么去对应一条的字段?
我看你 下面兄台回答说 去掉重复就可以 你直接加个 distinct 就可以去除重复
这个也有点道理额
不过我现在已经乱了
追答你需求都不明确啊 你都不知道统计什么。。。
追问就是根据zllb查出这几个字段啊
怎么不明确啊
追答假如 有 zllb 有3条叫 A 2条是B
如果你是要统计 A 有多少条 B有多少条
select zllb,count(*) group by zllb 那么这个时候 gxsj 这个字段 数据 到底是显示 第一条 还是显示第二条 根本没办法确定 只能是MAX 这样选唯一条
这也可以,但是还有一个hj字段不行
from slsq a,
(select a.zlib,count(*) as zs
from slsq a
where a.zlib is not null
group by a.zlib) b,
(select to_char(k.name_) hj, p.business_key_
from gisqbpm.ACT_BIZ_PROCINST p,
gisqbpm.ACT_RU_TASK k
where p.proc_inst_id_ = k.proc_inst_id_) g
where a.zlib = b.zlib
and a.ywh = g.business_key_;追问
哥们儿,这个zllb有重复的啊,不能重复的,如果这个问题解决了应该可以的
追答a.gxsj, a.jssj
这两个字段不在分组中,所以检索结果出现了分组的项目有重复。
如果不重复的话这两个字段要取第几个记录?
因为分组后的记录里同一个组的记录只有一条,所以想问一下对于没在分组单位里的字段,要取第几个记录?
这两个是时间,一个开始时间,一个结束时间
第一个去最开始的时间,第二个取最后一个吧
追答select a.zlib, count(*) zs, g.hj, min(a.gxsj), max(b.jssj)
就是你写的那个SQL,把第一行像这样再加一个集函数,你再试一试。
是你原来写的那个SQL上这样改。
这样那个g.hj多了,去掉就可以,但是不能去掉啊
怎么办?
追答我想再问个问题,slsq表中ywh和zlib这两个字段的关系是什么?
追问一个是文件的编号,一个是文件的类别
追答select b.zlib, b.zs, g.hj, b.gxsj, b.jssj
from
(select a.zlib,count(*) as zs,min(a.gxsj), max(a.jssj)
from slsq a
where a.zlib is not null
group by a.zlib) b,
(select to_char(k.name_) hj, p.business_key_, a.zlib
from gisqbpm.ACT_BIZ_PROCINST p,
gisqbpm.ACT_RU_TASK k,
slsq a
where p.proc_inst_id_ = k.proc_inst_id_
and a.ywh = p.business_key_) g
where g.zlib = b.zlib;
这样写再试一下。
还是不行啊
zllb重复了
后面红色的那几个是我注释掉的
这样才可以运行
不然报错啊
追答ywh和zllb不是一对一的关系,可能是多对一的关系。
有些麻烦。就是现在一个文件类别中包含多个文件编号,而文件编号是与另一个检索相关联的条件。如果一个文件类别只取一个文件编号的话,这样分组做的统计就失去意义了。
麻烦你个事儿,你看一下你客户的要求,这个ACT_RU_TASK表的name_字段是必须要检索出来的吗?因为如果把这个字段加上的话对统计有影响。
如果必须要加的话,那就像之前写的那两个时间一样,把你写的SQL中的hj也加个集函数。这样做是没有办法的办法。
这个字段是个字符串类型的,加个什么集函数啊?
追答但是不加,没办法回避分组这个问题。
除非分组的时候是按照这两个字段进行分组。
按两个分组应该会乱的
追答那就还得需要确认一个问题ywh和zllb是多对一的关系。
如果检索结果中zllb取一条,那么与zllb对应的ywh应该取哪一条?就是取得的条件是什么?
拜托你帮忙找一下,谢谢。
ywh和zllb是一对一的
这个ywh永远不会重复的,也只能给一个文件
如果有相同类型的文件,会有另外一个ywh
追答如果ywh和zllb是一对一的关系的话,那么分组条件中,写这两个与只写zllb的检索结果应该是一样的。因为一个zllb只能有一个ywh与之对应。
如果现在数据库里数据关系是这样的话,那你在分组条件中写两个,试一试。
啊?!那就是说ywh和zllb是多对一的关系了?
如果是多对一的关系的话,只能是在hj上加个集函数了。
那用哪个语句试?你给我的那个吗?
不行啊,多了一半多的数据了
试过了
追答现在数据库里的数据是ywh和zllb是多对一的关系。
就是说一个文件类型会有多个文件编号,那么像这种检索只能用这种集函数的方法回避了。
就是你写的SQL上,对hj加个集函数。
那用那个函数啊?
追答MAX或者MIN。
追问这个好像可以了
😱😱
厉害啊
本回答被提问者采纳