sql order by和另一个值限制

时间:2017-02-12 14:05:43

标签: mysql sql

所以,我有2个表,release和release_favourites。

发布结构:

  id    date (timestamp)    other data
  1     1486901083          ...
  2     1486909903          ...
  ....

release_favourites结构:

  id    releaseId    userId
  1     2            5
  2     2            10
  ....

我想按日期订购记录(没有问题,你可以在SQL中看到),但我只想要10条最喜欢的记录,这可能吗?

(下面的SQL有效,但仅适用于按日期排序)

SELECT [some rows]
FROM release AS a, release_favourites AS b
WHERE a.id = b.releaseId
ORDER BY a.date

3 个答案:

答案 0 :(得分:1)

select      *

from        release

where       id in
            (
                select      releaseid
                from        release_favourites
                group by    releaseid
                order by    count(*) desc
                limit       10
            )

order by    date

答案 1 :(得分:0)

根据您的说明,您需要GROUP BY。您只显示一个表(尽管您的查询有两个)。这是对你想要的(合理的)猜测:

select rf.release_id
from release_favourites rf
group by rf.release_id
order by count(*) desc
fetch first 10 rows only;

您可以从其他表中加入您真正想要的任何字段(或使用inexists)。并非所有数据库都支持ANSI标准fetch first 10 rows only语法。但是所有人都有办法将结果集限制为给定的行数。

答案 2 :(得分:0)

SELECT DISTINCT [some rows]
FROM release 
WHERE id IN (
       SELECT releaseId 
       FROM (
              SELECT releaseId
              FROM release_favourite
              GROUP BY releaseId
              ORDER BY count(*) 
              DESC LIMIT 10
       )
       AS tmp
)
ORDER BY date