2017-01-28 12 views
1

の複数の列に同じ値の行があります。テーブルが大きく、多くの列と行があります。 その中に私はID、経度、緯度を持っています。 私は同じ座標(緯度・経度)、このような 何かをIDの値が

ID¦latitude¦longitude¦number 

1 ¦ 12.12¦ 34.54¦1 

12¦ 12.12¦ 34.54¦1 

52¦ 12.12¦ 34.54¦1 


3 ¦ 56.08¦ -45.87¦1 

67¦ 56.08¦ -45.87¦1 

おかげで持っているIDのリストを持っていると思い

+0

あなたは経度と緯度を連結末尾に「ヘルパー」の列を追加のいずれかのクエリを使用しEXISTS 。たとえば、 '= B2&C2'という列の2行目に貼り付けてからドラッグします。そして、 'countif'を使って、それぞれの出現のインスタンスを数えます。 – Ralph

+0

さらに、同じLatおよびLongのIDのみを含むビューを作成することもできます。単純なWHERE節でこれを作成することができます。 –

+0

この意味は? ExcelまたはPostgres? –

答えて

1

シンプルなソリューション:

SELECT 
    t.id, t.latitude, t.longitude, grp.tot 
FROM 
    your_table t INNER JOIN (
     SELECT latitude, longitude, count(*) AS tot 
     FROM your_table 
     GROUP BY latitude, longitude 
     HAVING count(*) > 1 
    ) grp ON (t.latitude = grp.latitude AND t.longitude = grp.longitude); 

または重複を取得します緯度/経度:

SELECT 
     latitude, longitude, 
     array_agg(id ORDER BY id) AS ids 
    FROM 
     place 
    GROUP BY 
     latitude, longitude 
    HAVING 
     count(*) > 1; 
+0

ちょうど好奇心から:もし* list *が緯度と経度の後のIDの連結でなければならない場合、PostgreSQLの解決策は何でしょうか(T-SQLベースのソリューションの私のソリューションで行ったように)?私が何を意味しているのかを視覚的に示すために、ここで見ることができます:https://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/ – Ralph

+0

@Ralph 'array_agg 'または' string_agg'関数 –

+0

@Ralph回答する例を追加しました。 –

2

あなたはc

select * 
from the_table t1 
where exists (select 1 
       from the_table t2 
       where t1.id <> t2.id 
       and (t1.latitude, t1.longitude) = (t2.latitude, t2.longitude)) 
order by latitude, longitude; 

またはウィンドウ関数:

select * 
from (
    select t.*, 
      count(*) over (partition by latitude, longitude) as cnt 
    from the_table t 
) t 
where cnt > 1 
order by latitude, longitude; 

オンライン例:http://rextester.com/ITKJ70005

+0

- 私はWINDOW関数の例をポストしようとしていましたが、最初にそれを持っています:)この場合、WINDOW関数はより良い方法を実行する必要があり、ORDER BYは省略可能です。 –