【问题标题】:ORACLE Select and group by excluding one fieldORACLE 通过排除一个字段来选择和分组
【发布时间】:2012-08-13 06:58:57
【问题描述】:

我有一个非常简单的查询(在 Oracle 11g 上)选择 3 个字段:

select field1, field2, field3, count(*) from table
where...
group by field1, field2, field3
having count(*) > 10;

现在,我需要的是从“分组依据”中排除“field3”,因为我只需要对字段 1 和 2 进行分组,但我还需要在输出中使用 field3。 据我所知,select中的所有字段也必须在“group by”中报告,那么我该如何处理呢?

谢谢 卢卡斯

【问题讨论】:

    标签: sql oracle group-by


    【解决方案1】:
    select t.field1, t.field2, t.field3, tc.Count
    from table t
    inner join (
        select field1, field2, count(*) as Count
        from table 
        where... 
        group by field1, field2 
        having count(*) > 10 
    ) tc on t.field1 = tc.field1 and t.field2 = tc.field2
    

    【讨论】:

    • 您的查询不起作用,因为两次报告相同的值! :-(
      顺便说一句,假设该表包含以下内容:
      codeFIELD1 FIELD2 FIELD3
      1111 2222 1234
      1111 9876 1234 1111 2222 1234code 用我的简单查询我得到了这个结果:codeFIELD1 FIELD2 FIELD3 COUNT 1111 2222 1234 2 1111 9876 1234 1code 但是由于 field1 和 field3 始终相同,所以计数应该是 3。但问题是,假设我可以创建查询要做到这一点,FIELD2 的输出呢?
    【解决方案2】:

    使用“count”函数的analytical version

    select * from (
    select field1, field2, field3, count(*) over(partition by field1, field2) mycounter
    from table ) 
    --simulate the having clause
    where mycounter > 10;
    

    【讨论】:

      【解决方案3】:

      如果您不再按field3 分组,每个组可能突然有不同的field3。您必须决定显示哪一个,例如最大值:

      select field1, field2, max(field3), count(*) from table
      where...
      group by field1, field2
      having count(*) > 10;
      

      【讨论】:

        猜你喜欢
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        相关资源
        最近更新 更多