【问题标题】:Getting records from table where some attribute is unique从某些属性唯一的表中获取记录
【发布时间】:2013-08-26 18:37:14
【问题描述】:

我有一个表格 Person(id、name、city)。

我想返回每个城市只有一个人的人的记录(城市应该是唯一的)。

例如,如果有 10 条记录,其中 3 条城市 = 'Mumbai',其他 3 条城市 = 'New York',剩下 4 条城市 = 'Chicago',那么我想返回 3 条记录(一条每个城市)。

我尝试了各种方法,包括 DISTINCT、ROWNUM,但没有得到想要的结果。

谁能告诉我这是如何实现的?

【问题讨论】:

  • 你能发布你的SQL吗?什么数据库?

标签: sql unique distinct rownum


【解决方案1】:

如果你的意思是你想返回那些只列出一个人的城市......

Select Max(ID), max(name), City, count(city)
From Person
Group by City
Having count(City) = 1

如果您的意思是要返回不同的城市列表...

SELECT city
FROM Person
GROUP BY city

如果您的意思是要返回一个城市中的所有人员,但只列出该城市一次... 你想看到什么结果?如果您需要人名/ID,这是不可能的,因为您的记录在 2 个不同的城市有 3 个用户,在最后一个城市有 4 个用户。那么您希望在结果中看到什么“人”...所以在孟买有 A、B、C...您希望该城市看到什么结果?

【讨论】:

    【解决方案2】:

    这就是你要找的吗?一条记录,计算每个城市有多少个名字??

    select city,count(*) as COUNT
    from Person
    group by city
    order by city
    

    【讨论】:

      【解决方案3】:

      试试这个:-

        select city,id, name
        from Person
        group by city
        order by city
      

      【讨论】:

      • 给我:ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression" *Cause: *Action:
      • @Vikram:- 更新了我的答案。请检查!!
      【解决方案4】:

      不管是哪个城市,你都想要一个城市一排?

      select city,id, name
      from
        (select city, id, name,
            row_number() over (partition by city order by id) as rn 
         from Person
        ) dt
      where rn = 1
      

      这将返回每个城市 ID 最低的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多