Запрос на поиск людей с наибольшим количеством очков - PullRequest
2 голосов
/ 02 февраля 2012

Я использую Mysql и у меня есть эти таблицы: (показаны только важные столбцы)

лицо
id , первичный ключ

Сообщение
id , первичный ключ
баллов , INT

Посетить домашнюю страницу
id , первичный ключ
person_id , относится к Person
post_id , относится к Посту

Что я хочу найти - это Персоны (топ-5) с наибольшим количеством очков в целом? И люди с наибольшим количеством очков на каждом посту.

Может кто-нибудь, пожалуйста, направлять меня? Любая помощь высоко ценится!

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Топ 5 человек с наибольшим количеством баллов:

SELECT
    p.id,
    SUM(Post.points) AS total_points
FROM
    Person p
    INNER JOIN Visit v
        ON p.id = v.person_id
    INNER JOIN Post
        ON v.post_id = Post.id
GROUP BY
    p.id
ORDER BY
    SUM(Post.points) DESC
LIMIT 5

Топ 5 человек с наибольшим количеством баллов в одном посте:

SELECT
    p.id,
    MAX(Post.points) AS best_post_points
FROM
    Person p
    INNER JOIN Visit v
        ON p.id = v.person_id
    INNER JOIN Post
        ON v.post_id = Post.id
GROUP BY
    p.id
ORDER BY
    MAX(Post.points) DESC
LIMIT 5

Топ 5 постов:

SELECT
    p.id,
    Post.points
FROM
    Person p
    INNER JOIN Visit v
        ON p.id = v.person_id
    INNER JOIN Post
        ON v.post_id = Post.id
ORDER BY
    Post.points DESC
LIMIT 5
0 голосов
/ 02 февраля 2012
SELECT *
FROM
(
 SELECT P.id , SUM(PP.points)
 FROM PERSON P JOIN VISIT V ON ( V.person_id = P.id ) 
 JOIN POST PP JOIN ON ( PP.id = V.post_id )
 GROUP BY P.id
 ORDER BY PP.points DESC
)
LIMIT 5;

SELECT *
FROM
(
   SELECT P.id , COUNT(*) NUM_OF_POST
   FROM PERSON P JOIN VISIT V ON ( V.person_id = P.id ) 
   JOIN POST PP JOIN ON ( PP.id = V.post_id )
   GROUP BY P.id
   ORDER BY NUM_OF_POST DESC
)
LIMIT 5; 
0 голосов
/ 02 февраля 2012

Для каждого сообщения

SELECT id FROM Person where id in (SELECT person_id FROM Visit where post_id in (SELECT id FROM Post order by points DESC limit 5))

В целом (не уверен, сработает ли, не проверял)

SELECT id FROM Person where id in (SELECT distinct(person_id) FROM Visit where post_id in (SELECT id FROM Post order by points DESC limit 5) GROUP BY person_id )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...