【问题标题】:Oracle select MAX from duplicated dataOracle 从重复数据中选择 MAX
【发布时间】:2017-10-28 17:22:47
【问题描述】:

我只需要选择一个带有“DOC_NO”的记录,但结果是重复的。

SELECT DOC_NO
       , (SELECT MAX(SUBJECT) KEEP(DENSE_RANK FIRST ORDER BY vsize(SUBJECT) DESC)
           FROM MainData MD2 
          WHERE MD.DOC_NO = MD2.DOC_NO) AS SUB
       , count(*)
  FROM MainData MD
  WHERE 1=1                   
  GROUP BY DOC_NO, SUBJECT
  ORDER BY count(*) desc;

→ 我预计结果计数将全部为 1。但结果中,有些是 2、3..

原始数据如下

(...) DOC_NO      SUB
      111a        'the example'
      111a        'the example'
      111a        'the example'
      222a        'the example2'    
      222a        'the example2'      
      333a        'the example3'       
      333a        'the example3'       

→ 两者 (DOC_NO, SUB) 都不是 PK。所以允许复制。

请告诉我如何在重复中选择一条记录。

添加和编辑>>

我预期的结果是

DOC_RNO    SUB             count(*) 
111a     'the example'     1   
222a     'the example2'    1 
333a     'the example3'    1   

结果是

DOC_RNO    SUB             count(*) 
111a     'the example'     3    
222a     'the example2'    2 
333a     'the example3'    2 

【问题讨论】:

  • 给出一些带有必要列的示例数据行以及基于此的预期输出
  • 没有你的样本数据,它给你这个输出,很难给你任何答案
  • 感谢您的建议!我编辑了。
  • GROUP BY 中的 SUBJECT 列在哪里?你不是说 SUB 吗?
  • 您是否只想为每个docNosub 组合硬编码1?如果是,那么只需使用select DOC_RNO, SUB, 1 as count1 from your table group by DOC_RNO, SUB

标签: sql oracle select duplicates


【解决方案1】:

试试

SELECT doc_no, sub, COUNT (*)
    FROM (SELECT DISTINCT doc_no, sub FROM maindata)
GROUP BY doc_no, sub
ORDER BY doc_no;

不知道为什么你有子查询来获得排名密集的主题,如果你坚持有子查询,你可以试试

  SELECT doc_no, sub, COUNT (*)
    FROM (SELECT DISTINCT
                 doc_no,
                 (SELECT MAX (sub)
                            KEEP (DENSE_RANK FIRST ORDER BY VSIZE (sub) DESC)
                    FROM test_data md2
                   WHERE md.doc_no = md2.doc_no)
                    sub
            FROM test_data md)
GROUP BY doc_no, sub
ORDER BY doc_no;

Demo

【讨论】:

  • 谢谢!有了你的回答,我可以回顾一下我误解了什么。
  • @kdragon 首先,取子查询中的不同行,并在外部查询中使用 count 函数来获取 doc_no 的唯一计数。很高兴我能提供一些帮助。
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2016-11-11
  • 2013-02-21
相关资源
最近更新 更多