2016-03-06 1 views
0

Я заинтересован в том, чтобы пользователи, которые входят в первую десятку процентов друзей в базе данных социальной сети.SQL-запрос, чтобы получить пользователей, у которых есть друзья в верхней части N-го процентиля

В приведенном ниже фрагменте кода указаны все пользователи, у которых максимальное количество друзей.

SELECT 
    h.name, 
    h.grade 
FROM 
    highschooler h, 
    friend f 
where 
    h.id = f.id1 
group by 
    f.id1 
having 
    count(f.id2) <= (
     select 
      max(r.c) 
     from 
     (
      select 
       count(id2) as c 
      from 
       friend 
      group by 
       id1 
     ) as r) 

Моя база данных выглядит следующим образом:

Highschooler (ID, name, grade) 

Там студент средней школы с уникальным идентификатором и данного имени в определенном классе.

Friend (ID1, ID2) 

Студент с ID1 дружит с учеником с ID2. Дружба взаимная, поэтому, если (123, 456) находится в таблице «Друг», то есть (456, 123).

Мне интересно, есть ли функция процентиля, которую можно использовать вместо функции MAX. Есть ли у кого-нибудь идеи о том, как я могу получить пользователей, у которых есть друзья в 10-м процентиле?

Любая помощь будет оценена по достоинству!

+0

Пожалуйста, помечать свой вопрос с базой данных, которую вы используете. Ответ может легко зависеть. – sgeddes

+0

Я добавил, я полагаю. Вам нужна дополнительная информация о самой базе данных? –

+0

Используете ли вы 'sql server',' mysql', 'oracle' или какую-то другую базу данных? – sgeddes

ответ

1

Вы можете использовать PERCENTILE_DISC, который может решить вашу проблему. Вы можете прочитать больше о here

простой пример:

select sellerid, qty, percentile_cont(0.9) 
within group (order by qty) -- sort criteria on the field 
over(partition by sellerid) as median from winsales -- partition; 
Смежные вопросы