首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于oracle sql group by 'not A group by expression‘

关于oracle sql group by 'not A group by expression‘
EN

Stack Overflow用户
提问于 2012-07-11 15:45:28
回答 3查看 753关注 0票数 0

Oracle10g,sql抛出异常:“not a group by expression”

代码语言:javascript
复制
select count(*)
        from (
            select h.personal_info_id pid,h.hbsag hbsag,h.sgpt sgpt,MAX(h.date_reported)
            from health_checkup_info h
            inner join personal_info p on h.personal_info_id = p.id
            where
                h.deleted = 0
                and h.date_reported is not null
                and h.hbsag in(1,2)
                and p.deleted = 0

            group by h.personal_info_id
        ) t where t.hbsag=1 and t.sgpt>=20

然后,我更改了'group by‘参数,添加'h.hbsag’'h.sgpt',如下所示:

代码语言:javascript
复制
group by h.personal_info_id,h.hbsag,h.sgpt

但是结果是不正确的。

EN

回答 3

Stack Overflow用户

发布于 2012-07-12 16:17:55

谢谢大家,现在我已经解决了problem.The查询是:

代码语言:javascript
复制
select count(*)
        from (
            select h.personal_info_id pid,h.hbsag,ROW_NUMBER() OVER (partition by h.personal_info_id order by h.date_reported desc) r
            from health_checkup_info h
            inner join personal_info p on h.personal_info_id = p.id
            where
                h.deleted = 0
                and h.date_reported is not null
                and h.hbsag in(1,2)
                and p.deleted = 0

        ) t where t.hbsag=2 and r=1
票数 1
EN

Stack Overflow用户

发布于 2012-07-11 15:49:01

您应该添加不属于聚合函数的所有列。尝尝这个。

代码语言:javascript
复制
select count(*) from 
( 
    select h.personal_info_id pid,h.hbsag hbsag,h.sgpt sgpt,MAX(h.date_reported) 
    from health_checkup_info h inner join personal_info p on h.personal_info_id = p.id 
    where h.deleted = 0 and h.date_reported is not null and h.hbsag in(1,2) and p.deleted = 0
    group by h.personal_info_id ,h.hbsag ,h.sgpt 
) t 
票数 0
EN

Stack Overflow用户

发布于 2012-07-11 15:52:02

它的Oracle行为,除了聚合函数之外,所有选定的列都必须按以下方式分组。

代码语言:javascript
复制
select count(*)
        from (
            select h.personal_info_id pid,h.hbsag hbsag,h.sgpt sgpt,MAX(h.date_reported)
            from health_checkup_info h
            inner join personal_info p on h.personal_info_id = p.id
            where
                h.deleted = 0
                and h.date_reported is not null
                and h.hbsag in(1,2)
                and p.deleted = 0

            group by h.personal_info_id,h.hbsag,h.sgpt
        ) t

更新:

由于您只使用count,那么需要获取其他列吗??试试这个..。

代码语言:javascript
复制
select count(*)
        from (
            select h.personal_info_id pid,MAX(h.date_reported)
            from health_checkup_info h
            inner join personal_info p on h.personal_info_id = p.id
            where
                h.deleted = 0
                and h.date_reported is not null
                and h.hbsag in(1,2)
                and p.deleted = 0

            group by h.personal_info_id
        ) t;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11427920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档