查询查找最多积分的人员

时间:2012-02-02 18:06:01

标签: mysql sql

我正在使用Mysql并拥有这些表:(仅显示重要的列)


id ,主键

发布
id ,主键
积分,INT

访问
id ,主键
person_id ,指人员 post_id ,指的是帖子

我想找到的是人数最多的人数(前5名)?每个帖子上得分最多的人。

有人可以指导我吗?任何帮助都是非常苛刻的!

3 个答案:

答案 0 :(得分:1)

总分最多的前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

答案 1 :(得分:0)

每篇文章

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 )

答案 2 :(得分:0)

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;