Sql:提取具有某些条件的记录

时间:2016-03-11 13:34:02

标签: sql oracle

我在Oracle数据库表中有行(有+ 2M记录),我想提取一些条件的记录。约束未在表上设置。任何帮助将不胜感激。

nif                 num_sum
--------------------------
123                   456
123                   456
123                   789   // => I want to select this
134                   600

允许具有nif且具有一个或多个相同num_sum的记录。但是,如果两个或更多不同的nif存在num_sum,我想选择nifnum_sum。我只展示了上述记录。

我试过了:

select distinct nif, num_sum
from sumcon
group by nif, num_sum
having count(distinct nif) > 1 

3 个答案:

答案 0 :(得分:1)

您不会返回任何记录,因为nif只有1个不同的值,因此计数不会大于1.

答案 1 :(得分:1)

根据您的描述,

"允许带有一个或多个相同num_sum的nif的记录(nif不应该是两个不同的num_sums)"

我想你想要以下内容:

SELECT nif
  FROM sumcon
 GROUP BY nif
HAVING COUNT(DISTINCT num_sum) > 1;

首先,在原始查询中DISTINCT是多余的。接下来,既然您说num_sum的给定值不应存在多个nif的不同值,我认为您希望按nif进行分组并使用COUNT(DISTINCT num_sum) 。现在,如果您的意思是num_sum的特定值不应存在多个nif的唯一值,那么您需要以下内容:

SELECT num_sum
  FROM sumcon
 GROUP BY num_sum
HAVING COUNT(DISTINCT nif) > 1;

如果您需要获得nif的所有值,那么您必须执行以下操作:

SELECT nif, num_sum FROM sumcon
 WHERE num_sum IN (
    SELECT num_sum
      FROM sumcon
     GROUP BY num_sum
    HAVING COUNT(DISTINCT nif) > 1
);

希望这有帮助。

答案 2 :(得分:0)

不确定这正是您所要求的,但我希望它会对您有所帮助。

select nif, num_sum from sumcon group by nif, num_sum having count(1) > 1