SQL: Как я могу вернуть запись с наивысшим рейтингом похожих записей, основываясь на значении одного столбца? - PullRequest
0 голосов
/ 25 июня 2011

Кажется, это должно быть проще, чем я нахожу.У меня есть таблица, которая содержит как имя, так и фамилию (указывается идентификатором типа) и частоту, с которой это имя встречается.Например:

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).С этим набором данных мой запрос FirstNames будет включать Джона и Томаса, а мой запрос LastNames вернет Смита и Уилсона.

Надеюсь, я хорошо это объяснил.

Спасибо за небольшую помощь,

Рассел Шутте

Ответы [ 4 ]

2 голосов
/ 25 июня 2011

Если я правильно понимаю, вы ищете имена, когда частота выше, чем частота с тем же именем, что и фамилия

Это работает для имен. Вам просто нужно поменять местами фамилии

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)
0 голосов
/ 25 июня 2011

Если вам нужны первые 2 имени и фамилии, вы можете сделать UNION ALL.

select name 
FROM table
where Nametype = 1
order by FrequencyPercent desc
limit 2
UNION ALL
select name 
from table
where nametype = 2
order by FrequencyPercent desc
limit2

0 голосов
/ 25 июня 2011

Топ 5 самых распространенных имен:

select Name
  from Names
  where NameType = 1
  order by FrequencyPercent desc
  limit 5;
0 голосов
/ 25 июня 2011

Если я понимаю, что вы хотите ...

Это даст вам первые имена:

SELECT *
FROM [NameTable]
WHERE FrequencyPercent > 1.0
    AND NameType = 1
ORDER BY FrequencyPercent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...