小编典典

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

sql

这似乎比我发现的要容易。我有一个表,其中包含名字和姓氏(由类型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)


阅读 182

收藏
2021-04-14

共1个答案

小编典典

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

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

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)
2021-04-14