SQL查找只有2列值的整行

Nim*_*rux 3 sql oracle group-by filter

我正试图

select columns Age, Height, House_number, Street
from my_table
where count(combination of House_number, Street)
occurs more than once.
Run Code Online (Sandbox Code Playgroud)

我的桌子看起来像这样

Age, Height, House_number, Street
15   178     6             Mc Gill Crst 
85   166     6             Mc Gill Crst
85   166     195           Mc Gill Crst
18   151     99            Moon Street 
52   189     14a           Grimm Lane
Run Code Online (Sandbox Code Playgroud)

我期望的结果看起来像这样

Age, Height, House_number, Street
15   178     6             Mc Gill Crst 
85   166     6             Mc Gill Crst
Run Code Online (Sandbox Code Playgroud)

卡住!

Gor*_*off 6

最好的方法是使用窗口函数,假设您的数据库支持它们:

select columns Age, Height, House_number, Street
from (select t.*, count(*) over (partition by house_number, street) as cnt
      from my_table t
     ) t
where cnt > 1
Run Code Online (Sandbox Code Playgroud)

这是在Oracle中使用Windows函数(也称为分析函数).表达式count(*) over (partition by house_number, street)是计算每个house_number和街道组合的行数.它有点像做a group by,但它会将计数添加到每一行,而不是将多行合并为一行.

完成后,只需选择值大于1的行即可.