当前位置: 首页 > 面试题库 >

SQL:如何基于一列值返回类似记录中排名最高的记录?

阳狐若
2023-03-14
问题内容

这似乎比我发现的要容易。我有一个表,其中包含名字和姓氏(由类型ID指定)以及名字的通用程度。例如:

NameType | Name      | FrequencyPercent
1          John        3.267
1          Thomas      1.987
1          Wilson      0.945
2          Smith       4.528
2          Wilson      2.221
2          Thomas      0.437

我希望能够查询名字(NameType =
1)列表,该列表仅在更可能是名字而不是姓氏的情况下才包括名字(基于FrequencyPercentage)。使用此数据集,我的名字查询将包括John和Thomas,而我的LastNames查询将返回Smith和Wilson。

希望我能很好地解释。

谢谢您的一点帮助,

罗素·舒特(Russell Schutte)


问题答案:

如果我理解正确,那么您正在寻找的名字的频率高于与姓氏相同的名字的频率

这适用于名字。您只需要反转姓氏

CREATE Table YourTable
(
NameType int,
name varchar(20),
FrequencyPercent decimal(12,4)
)

INSERT INTO  YourTable
VALUES (1 ,'John', 3.267),
(1 , 'Thomas',      1.987),
(1 , 'Wilson',      0.945),
(2 , 'Smith',       4.528),
(2 ,  'Wilson',      2.221),
(2 ,   'Thomas',      0.437)

SELECT firstNames.name
FROM
      YourTable firstNames 
LEFT JOIN YourTable  lastNames 
 ON firstnames.Name = lastNames.Name
    AND lastNames.NameType  =2
     and firstnames.FrequencyPercent < lastNames.FrequencyPercent
WHERE firstNames.NameType  =1
      AND
      lastNames.name is null

结果是

name
--------------------
John
Thomas
(2 row(s) affected)


 类似资料:
  • 问题内容: 我希望有人根据以下示例表对以下内容提供快速的建议/解决方案: 我希望能够建立一个查询来返回其名称(基于单个记录)= 1的列名称。这无需依赖游标或临时表。 即我想要以下输出: 我一直在尝试对(和)进行各种联接,但到目前为止收效甚微。 问题答案: 您也可以使用 要动态工作,请使用此功能。

  • 问题内容: 我有一个具有相似结构和数据的示例表,如下所示: 表在每个学生出现的所有科目中都有每个学生的合并标记。 请帮助我,编写一个查询以提取每个学生( 不分学科/其他学生 )获得的MAXIMUM分数,如下所示: 按S_Name和Max(MARK_Value)分组 问题答案: 使用窗口功能 或者您可以使用相关的子查询

  • 我想要的是,即基于日期的每个id的最新记录。我无法为此创建新表或视图。

  • 问题内容: 如果这: 从表中返回最新记录,如何获取 第二个最新 记录? 问题答案: 或者: 或者: 如果该列具有唯一值,则所有三个查询将给出相同的结果。如果该列可以有重复的日期,则它们可能给出不同的结果(当并列在第一或第二位时)。如果在第二位有联系,则第一个查询甚至会在结果中提供多行。

  • 我想让没有学过杰伦教授的任何课程的学生。从下面的表格中,所有的学生至少有一门课程是由杰伊教授的。因此,查询需要返回空值。 由于Phil()参加了Jay教授的课程,我原本以为它会返回空记录。因为他有两门课程,由Gloria担任讲师,所以它会返回Phil。我不知道如何从一组类似记录(相同,不同)中检查任何记录是否与某个

  • 我有以下记录是通过一个带有几个连接的查询得到的: 现在,当我尝试检索不在结果中的特定列时: 其中生成具有以下详细信息的静态编程语言代码: 我希望得到null。但是,返回了错误的id值(zkn_zaak.id)。 我错过了什么?jOOQ不应该有足够的信息(表和字段名)来从记录中检索正确的列吗? =======更新============= 从代码来看,这似乎是预期的行为,并且已经在例如。https: