【问题标题】:SQL: Get list of names form database without double occurencesSQL:从数据库中获取名称列表而不出现重复
【发布时间】:2020-02-17 04:26:16
【问题描述】:

我正在做我的第一次 sql 体验。我目前正在开发一个由 sql 数据库提供的家谱网站。当数据库中的人数增加时,我想实现一种简短的方法,只需单击几下即可导航到特定的人。 因此,我想首先给出数据库中所有姓氏的列表。 用于此的 sql 非常简单:

SELECT familyname FROM tablewithdata ORDER BY familyname;

这显然给了我一个这样的列表:

  • 格里芬
  • 格里芬
  • 格里芬
  • 米勒
  • 米勒
  • 米勒
  • 桑切斯
  • 桑切斯
  • 辛普森
  • 辛普森
  • 辛普森
  • 辛普森 ...

姓氏的出现次数与数据库中具有此名称的个人一样多。

但我希望数据库中的每个姓氏只出现一次,如下所示:

  • 格里芬
  • 米勒
  • 桑切斯
  • 辛普森

我希望有一个简单的解决方案来满足我的要求。我的谷歌搜索只导致我可以从我的数据库中删除重复条目。

非常感谢您的帮助!!

【问题讨论】:

标签: sql list sorting


【解决方案1】:

使用select distinct familyname FROM tablewithdata ORDER BY familyname;

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    SQL DISTINCT 关键字与 SELECT 语句结合使用,以消除所有重复记录并仅获取唯一记录。

    SELECT DISTINCT familyname 
    FROM tablewithdata 
    ORDER BY familyname;
    

    要从数据库中删除重复条目,您可以在此处使用 ROW_Number() 概念。

    DELETE FROM
    (
      SELECT familyname, ROW_NUMBER() OVER(PARTTION BY familyname ORDER BY familyname) 
      RN
      FROM tablewithdata;
    ) X WHERE RN > 1
    

    【讨论】:

    • 您的删除查询看起来是 Oracle 的,而且无论如何都是特定于数据库的。
    【解决方案3】:

    您可以使用分组方式:

    SELECT familyname FROM tablewithdata GROUP BY familyname ORDER BY familyname
    

    【讨论】:

    • 太棒了!这有效!
    【解决方案4】:

    SELECT distinct(familyname) FROM tablewithdata ORDER BY familyname

    。这应该对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2023-03-16
      • 2017-08-26
      • 2020-08-15
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多