首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在具有ID的多个列中查找具有相同值的行

在具有ID的多个列中查找具有相同值的行
EN

Stack Overflow用户
提问于 2017-01-29 00:29:05
回答 2查看 112关注 0票数 1

我有一个相对较大的表,有很多列和行。其中我有ID,经度和纬度。我想有一个ID的列表,其中具有相同的坐标(纬度和经度),类似这样

代码语言:javascript
运行
复制
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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-01-29 02:48:08

您可以使用EXISTS查询:

代码语言:javascript
运行
复制
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;

或窗口函数:

代码语言:javascript
运行
复制
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

票数 2
EN

Stack Overflow用户

发布于 2017-01-29 02:31:29

简单的解决方案:

代码语言:javascript
运行
复制
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);

或获取lat/lng的副本:

代码语言:javascript
运行
复制
    SELECT
        latitude, longitude, 
        array_agg(id ORDER BY id) AS ids
    FROM
        place
    GROUP BY
        latitude, longitude
    HAVING
        count(*) > 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41912112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档