如何在SQL中获得超过限制5的多个相同输出的TOP 5值

时间:2014-10-03 01:02:03

标签: php mysql

    Database 1           Database 2 
||==============||    ||==============||
||user || value ||    ||user || value ||
||-----||-------||    ||-----||-------||
|| 1   ||  50   ||    || 1   ||  50   ||
|| 2   ||  50   ||    || 2   ||  50   ||
|| 3   ||  50   ||    || 3   ||  40   ||
|| 4   ||  40   ||    || 4   ||  40   ||
|| 5   ||  40   ||    || 5   ||  30   ||
|| 6   ||  40   ||    || 6   ||  20   ||
|| 7   ||  40   ||    || 7   ||  20   ||
|| 8   ||  30   ||    || 8   ||  10   ||
|| 9   ||  30   ||    || 9   ||  10   ||
||==============||    ||==============||

我需要搜索前5个最高值,但不是只有5个结果,我需要那些具有50和40个值的7个用户。

我不能忽视他们的其他热门用户。 如果可以在SQL中完成那将是很棒的。如果没有PHP的帮助会做。

     Result 1              Result 1
||==============||    ||==============||
||user || value ||    ||user || value ||
||-----||-------||    ||-----||-------||
|| 1   ||  50   ||    || 1   ||  50   ||
|| 2   ||  50   ||    || 2   ||  50   ||
|| 3   ||  50   ||    || 3   ||  50   ||
|| 4   ||  40   ||    || 4   ||  50   ||
|| 5   ||  40   ||    || 5   ||  50   ||
|| 6   ||  40   ||    ||==============||
|| 7   ||  40   ||
||==============||    

2 个答案:

答案 0 :(得分:1)

SELECT user, value
FROM Database
WHERE value in (
    SELECT value
    FROM Database
    ORDER BY value DESC
    LIMIT 5)
)
ORDER BY value DESC, user

另一种方式是:

SELECT user, value
FROM Database
WHERE value >= (SELECT MIN(value)
                FROM (SELECT value
                      FROM Database
                      ORDER BY value DESC
                      LIMIT 5) AS x
                )
ORDER BY value DESC, user

答案 1 :(得分:1)

通常,对于给定的表,您可以执行以下操作:

SELECT t.*
FROM table t CROSS JOIN
     (SELECT t.*
      FROM table t
      ORDER BY value DESC
      LIMIT 1 OFFSET 4
     ) t5
WHERE t.value >= t5.value;

子查询选择第五行(OFFSET从0开始计数而不是1)。 where子句只选择大于该值的任何内容。

如果你想在两个表合并上运行它,那么你会想要使用union all